.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的验证

相关推荐
界面开发小八哥6 小时前
界面控件DevExpress WinForms中文帮助文档 - 入门指南
ai·c#·.net·devexpress·ui开发·winforms
清风与日月7 小时前
Yitter.IdGenerator:高性能分布式唯一ID生成器详解
分布式·c#·.net·.netcore
李昊哲小课10 小时前
SpringMVC 完整执行流程
spring boot·spring·mvc
大鹏说大话10 小时前
用 Semantic Kernel 在 .NET 中构建你的第一个 AI 智能体(Agent)
人工智能·.net
七仔啊11 小时前
C#、.NET 、ASP.NET Core、Visual Studio全系列快速入门
c#·asp.net·.net
超龄超能程序猿11 小时前
实战优化:.NET 8 容器 Debian 源+时间同步企业级 Dockerfile
运维·debian·.net
一个帅气昵称啊1 天前
.Net C# AI智能体开发-快速开始
开发语言·c#·.net
kyle~1 天前
.NET 软件开发平台
.net
一个帅气昵称啊1 天前
.Net C# AI智能体开发-AI智能体
人工智能·c#·.net
码农刚子2 天前
用 .NET 8 + uni-app 做一套多租户畜牧 SaaS:我们在秦巴牧云踩过的 6 个坑
uni-app·.net·saas