.net MVC 拦截器

编程入门 行业动态 更新时间:2024-10-21 07:55:56

.net MVC <a href=https://www.elefans.com/category/jswz/34/1771281.html style=拦截器"/>

.net MVC 拦截器

1、在App_Start文件夹添加类LoginInterceptor ,代码如下:


using Jayrock.Json.Conversion;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web;
using System.Web.Helpers;
using System.Web.Mvc;
using System.Web.Routing;

public class LoginInterceptor : ActionFilterAttribute
{

    #region 属性
    /// <summary>
    /// 记录是否登陆、已经验证
    /// </summary>
    public bool IsLogin { get; set; }
    #endregion

    //[LoginInterceptor] 在控制器类上加这个标注,标注后说明这个控制器里面都受到该拦截器限制
     //[LoginInterceptor(IsLogin = true)] 在具体的方法上加这个标注,可以跳过token的验证
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // 获取当前请求的控制器和操作方法
        string controllerName = filterContext.RouteData.Values["controller"].ToString();
        string actionName = filterContext.RouteData.Values["action"].ToString();
      
        // 如果当前请求的是登录操作,则不进行重定向
        if (controllerName == "User" && actionName == "login")
        {
            base.OnActionExecuting(filterContext);
            return;
        }
        
        if (!IsLogin)
        {
            //验证token
            string token = ""; 
            if (filterContext.HttpContext.Request.Form.AllKeys.Contains("token"))
            {
                token = filterContext.HttpContext.Request.Form["token"].ToString().Trim();
            }
            if (filterContext.HttpContext.Request.Params.AllKeys.Contains("token"))
            {
                token = filterContext.HttpContext.Request.Params["token"].ToString().Trim();
            }
            //filterContext.HttpContext.Response.Write("<script>alert('请先登录!');window.location.href='/Home/login';</script>");
            //filterContext.Result =new EmptyResult();

            var obj = new { succeed = false, data = "未登录或被其他人登录了,请重新登录", reload = "1" };
            if (!string.IsNullOrEmpty(token))
            {
                T_AppToken_BLL bllToken = new T_AppToken_BLL();
                if (!bllToken.isLogin(token, 1))
                { 
                    //形成日志....?
                    //token验证未通过
                    filterContext.Result = new System.Web.Mvc.JsonResult()
                    {
                        Data = obj,
                        ContentEncoding = System.Text.Encoding.UTF8,
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                        ContentType = "json"
                    };
                    return;
                }
            }
            else
            {
                //token值为空
                filterContext.Result = new System.Web.Mvc.JsonResult()
                {
                    Data = obj,
                    ContentEncoding = System.Text.Encoding.UTF8,
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                    ContentType = "json"
                };
                return;
            }
        }
 

        base.OnActionExecuting(filterContext);

    }


}

2、[LoginInterceptor]

在控制器类上加这个标注,标注后说明这个控制器里面都受到该拦截器限制

3、  [LoginInterceptor(IsLogin = true)]

在具体的方法上加这个标注,在拦截器方法里可以跳过token的验证

更多推荐

.net MVC 拦截器

本文发布于:2023-12-04 12:14:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1660876.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:拦截器   net   MVC

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!