当前位置:首页 > Web开发 > 正文

那么又需要继续增加验证代码

2024-03-31 Web开发

主要有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