那么又需要继续增加验证代码
主要有4中过滤器:
1.Authorization 身份验证过滤器
理解身份验证过滤器和无侵入式开发;
假如我这里有学生和教室两个东西,学生进入教室需要进行身份验证,如果在A学生上增加验证,,那么在代码层面就组成了侵入式开发,需要改削学生A的代码,如果多了一个学生C,那么又需要继续增加验证代码,不同适;
如果在教室东西上增加身份验证代码,如果新增了教室D,那么身份验证又需要重写,同时也组成了侵入式开发;
所以最好的方案是不改削学生和教室,在它们中间插手一层中间验证,哪个教室需要身份验证,就给它插手一个验证标签即可;
通过特性的方法打符号,决定哪些类或者行为需要进行验证;
特性怎么使用的:
身份验证过滤器怎么写:
如何自界说写过滤器(代码):
1)要领一:
①首先新建一个Filter文件夹(非必需,便于打点),新建一个MyAuthorization类,然后担任AuthorizationAttribute,然后重写OnAuthorization要领;
public class MyAuthorization:AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { //如果保存如下代码,则会运行.net framework界说好的身份验证,如果需要使用自界说身份验证,则禁用下列代码 //base.OnAuthorization(filterContext); //获取Http上下文内容 filterContext.HttpContext.Response.Write("123456"); //如果需要实现页面跳转成果,需要使用Result,而不是使用Respon.Redirect(), //因为第二种方案处事真个代码仍然会继续往下执行,不会遏制 //filterContext.Result = new RedirectResult("controller/action"); } }
②应用特性到行为或者控制器;
[MyAuthorization] public class HomeController : Controller { [MyAuthorization] public ActionResult Index() { return View(); } public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); } public ActionResult Contact() { ViewBag.Message = "Your contact page."; return View(); } }
可以安排过滤特性标签到控制器类上或者行为上。
如何全局注册过滤器,使得所有的控制器,行为都具有过滤特性;
在Global文件中的
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RegisterGlobalFilters中增加下面代码即可
//所有都有了身份验证
filters.Add(new MyAuthorization());
2)要领二:
重写控制器的内部OnAuthorization要领,这样会应用过滤于控制器下的所有行为;
public class HelloController : Controller { // GET: Hello [MyAuthorization] public ActionResult Index() { return View(); } //重写此要领即可,在执行挨次上优先挪用该验证 protected override void OnAuthorization(AuthorizationContext filterContext) { filterContext.HttpContext.Response.Write("Inner Hello!"); } }
错误谬误:灵活性不够,保举使用特性的方法,但是这种也可以。
2.异常措置惩罚惩罚过滤器
怎么做:
首先还是界说一个过滤器的类,该类担任开篇提到的HandleErrorAttribute类,然后类中重写OnException要领;
public class MyException:HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { //如下代码不成删除,否则将无法捕获到异常 base.OnException(filterContext); //记录日志 //页面跳转 filterContext.Result = new RedirectResult(@"/Error/400.html"); } }
因为异常过滤器一般会设置在全局环境中,那么在注册过滤器的代码中需要这么样写:
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30609.html