2020.10.22-MVC5过滤器(权限认证)与checkbox传值的相关问题

it2025-09-29  5

一、checkbox传值:通过Name属性值获取 用户选中的项数据,会序列化成数组形式传递 后台代码:


二、MVC5的权限验证AuthorizeAttribute

using Microsoft.Ajax.Utilities; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Helpers; using System.Web.Management; using System.Web.Mvc; namespace RM_MVC._2020._10._21.Models { /// <summary> /// 指定空明知其或Action的访问只限于满足授权的用户 /// </summary> [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] public class UserInfoAuthorizationAttribute : AuthorizeAttribute { public string loginUri { get; set; } //不同项目的登录Action 可能不一样 public UserInfoAuthorizationAttribute(string loginUrl = "~/UserInfo/Index") { this.loginUri = loginUrl; } /// <summary> /// 认证校验 /// </summary> /// <param name="filterContext"></param> public override void OnAuthorization(AuthorizationContext filterContext) { //判断是否跳过授权过滤器 if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true) || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true)) { return; } else { if (filterContext.HttpContext.Session["CurrentUseInfo"] == null || !(filterContext.HttpContext.Session["CurrentUseInfo"] is Userinfo)) { //如果是Ajax请求 返回Json数据 if (filterContext.HttpContext.Request.IsAjaxRequest()) { //filterContext.Result = new ContentResult() { Content = "NO-请登录" }; //返回son字符串 filterContext.Result = new JsonResult() { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { msg = "请登录", code = 0 } }; } //记住用户请求的URL,登陆成功以后自动跳转至该页面 filterContext.HttpContext.Session["FirstUrl"] = filterContext.HttpContext.Request.Url.AbsoluteUri; //如果不是Ajax,就直接获取或设置由Action返回的结果(跳转页面) filterContext.Result = new RedirectResult(this.loginUri); } else { //已有登录 略过不处理(日志。。) return; } } //base.OnAuthorization(filterContext); } } }

使用方式:class action 全局: 1.登录(Login)控制器或者Action不需要认证、使用AllowAnonymous特性忽略认证 2.只打上特性标签还远远不够、需要在你权限认证的时候,加判断。 3.这样用户在请求登录页面的时候不会造成死循环(无限重定向)、


三、Error自定义全局过滤器: 使用方式:class action 全局: △:自定义异常处理程序能捕获哪些异常信息?

1.Action异常、没被捕获 2.Action调用Servicec服务异常(异常throw传递) 3.Action正常、View视图异常 4.权限验证时异常(Authorization)

△:自定义异常处理程序不能捕获到哪些异常信息?

1.控制器构造函数异常不能被捕获。(控制器被构造后,才有Filter) 2.访问Action时名称出错 (与Route相关、与MVC处理程序无关)

△:怎么解决这些漏网之鱼?实现可以全面捕获异常的组合? 注册Global文件里的Application_Error() 事件–全局异常处理事件函数


四、Action过滤器: 扩展:Action过滤器也可以使用Controller基类实现


五、过滤器(执行顺序)以及改变方式

如果一个Action同时应用了 Action过滤、Class过滤、全局过滤 默认由外到内–>由内到外 这个执行顺序 改变顺序---->使用Order属性 值越大 优先触发过滤事件

[ActionFilterAttribute(order = 15 )] [ControllerFilterAttribute(order = 50 )] [OverallFilterAttribute(order = 5 )]


六、Action(执行顺序)异常捕获 图片

最新回复(0)