ASP.NET MVC 过滤、异常过滤器】的更多相关文章

摘要 在asp.net mvc中除了使用try...catch/finally来处理异常外,它提供了一种通过在Controller或者Action上添加特性的方式来处理异常. HandleErrorAttribute 首先看一下该特性的定义 using System; namespace System.Web.Mvc { // 摘要: // 表示一个特性,该特性用于处理由操作方法引发的异常. [AttributeUsage(AttributeTargets.Class | AttributeTa…
ControllerActionInvoker在执行过程中除了利用ActionDescriptor完成对目标Action方法本身的执行外,还会执行相关过滤器(Filter).过滤器采用AOP的设计,它使我们可以将一些非业务的逻辑在相应的过滤器中实现,并以一种横切的方式应用到对应的Action方法上. 根据用途和执行时机的不同,ASP.NET MVC提供的过滤器可分为6种 AuthenticationFilter AuthorizationFilter ActionFilter Exception…
下面我们继续之前的ASP.NET MVC学习之过滤器篇(1)进行学习. 3.动作过滤器 顾名思义,这个过滤器就是在动作方法调用前与调用后响应的.我们可以在调用前更改实际调用的动作,也可以在动作调用完成之后更改最终返回的结果,当然很多人一定不太明白这个到底可以干什么, 下面我们举一个比较实际的例子: 相信理解过网站的安全的一定知道跨站请求(CSRF具体可以自行百度,这里我就不去解释了),当然也有解决方案,那就是给页面中增加一个识别码,当页面进行POST请求时,首先判断识别码是否正确, 如果正确则继…
概念介绍 异常过滤器主要在我们方法中出现异常的时候触发,一般我们用 异常过滤器 记录日志,或者在产生异常时做友好的处理 如果我们需要创建异常过滤器需要实现IExceptionFilter接口. namespace System.Web.Mvc { // // 摘要: // 定义异常筛选器所需的方法. public interface IExceptionFilter { // // 摘要: // 在发生异常时调用. // // 参数: // filterContext: // 筛选器上下文. v…
一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration :缓存的时间, 以秒为单位 ,理论上缓存时间可以很长,但实际上当系统资源紧张时,缓存空间还是会被系统收回. VaryByParam :以哪个字段为标识来缓存数据,比如当"ID"字段变化时,需要改变缓存(仍可保留原来的缓存),那么应该设VaryByParam为"ID".这里你可以设置以下几…
先来看看一个例子演示过滤器有什么用: public class AdminController : Controller { // ... instance variables and constructor public ViewResult Index() { if (!Request.IsAuthenticated) { FormsAuthentication.RedirectToLoginPage(); } // ...rest of action method } public Vie…
一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration:缓存的时间,以秒为单位,理论上缓存时间可以很长,但实际上当系统资源紧张时,缓存空间还是会被系统收回. VaryByParam:以哪个字段为标识来缓存数据,比如当“ID”字段变化时,需要改变缓存(仍可保留原来的缓存),那么应该设VaryByParam为"ID".这里你可以设置以下几个值: * = 任何参数变化…
过滤器 什么是过滤器? 过滤器(Filter) 主要的作用大致可以理解为把我们的附加逻辑注入到MVC框架的请求处理. 在ASP.NET MVC的请求处理中一种有19个管道事件分别是 BeginRequest:HTTP管道开始处理请求时,会触发BeginRequest事件 AuthenticateRequest:安全模块对请求进行身份验证时触发该事件 PostAuthenticateRequest:安全模块对请求进行身份验证后触发该事件 AuthorizeRequest:安全模块对请求进程授权时触…
一.前言 继前面四篇ASP.NET MVC的随笔,我们继续向下学习.上一节我们学习了关于控制器的使用,本节我们将要学习如何使用过滤器控制用户访问页面. 二.正文 以下的示例建立在ASP.NET MVC 4之上(VS2012) 1.授权过滤器 只要涉及用户的网站,都一定会涉及到什么权限的用户可以访问哪个页面.对于新手而言可能都在每个页面中单独写这个功能方法,导致的后果就是大量重复的代码,并且不便于以后的变动.有用一定经验之后,就会采用集中控制的方式,让所有的页面先执行特定的方法去判断,这样的优点就…
这里用实例说明各种过滤器的用法,有不对的地方还请大神指出,共同探讨. 1. ActionFilter 方法过滤器: 接口名为 IActionFilter ,在控制器方法调用前/后执行. 在新建的MVC程序中,添加一个类 MyFilter1Attribute 并继承ActionFilterAttribute抽象类 从上图可以看到 ActionFilterAttribute 中的所有方法,且有相应的介绍,我们可以通过继承 ActionFilterAttribute 类,并重写(override)它的…
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace 过滤器.Filtes { /// <summary> /// 全局异常过滤器 /// </summary> public class MyHandleErrorAttribute : HandleErrorAttribute { public over…
在asp.net MVC中,每一个Action方法完成之后都会返回一个结果,而我们可以在Result过滤器中根据需要修改这个结果.例如可以根据UserAgent来判断客户端的来源是手机还是PC端,从而显示不同的视图. 自定义的Result过滤器需要继承FilterAttribute类和IResultFilter接口. FilterAttribute类有两个关键属性: AllowMultiple:布尔型,指示是否可指定筛选器特性的多个实例.如果可指定筛选器特性的多个实例,则为 true:否则为 f…
在asp.net MVC中,Action过滤器是一大利器,它可以在以下两个步骤执行相关的代码: 1.执行Action方法之前:OnActionExecuting 2.Action方法执行完毕后:OnActionExecuted 一般我们自定义的Action过滤器会继承FilterAttribute类和IActionFilter接口. FilterAttribute类有两个关键属性: AllowMultiple:布尔型,指示是否可指定筛选器特性的多个实例.如果可指定筛选器特性的多个实例,则为 tr…
开发ASP.NET多了,它的异常信息显示也习惯了.但在ASP.NET MVC中,却是另外一番情形. 以前只习惯使用IE浏览器,现在开发ASP.NET MVC程序,为了捕获到异常信息,Firefox的firebug插件也用了起来,它却实是能帮到我们的大忙,可以参考<Internal Server Error>http://www.cnblogs.com/insus/p/3418942.html . 下面这个例子,是一个小小超简单的计算器,实现加减乘除功能.如果用户有输入异常数据时,我们就能捕获到…
全局权限过滤器 //----------------------------------------------------------------------- // <copyright file="PermissionFilter.cs" company="STO EXPRESS, Ltd."> // Copyright (c) 2015 , All rights reserved. // </copyright> //--------…
项目介绍:asp.net mvc + angular +iis(windows)+windows server 系统莫名崩溃 最近有个系统默认奇妙崩溃50x,服务整体变成无响应,当运维告知我只有重启应用程序池项目才能正常. 我问他如何重现,得到的回复是我这里无法重现,但客户使用一段时间后,就会崩溃. 于是我崩溃了.因为查日志没有任何错误,查windows系统日志上也只有一个错误 System.AccessViolationException 尝试读取或写入受保护的内存.这通常指示其他内存已损坏,…
记录下过滤器的学习—_— APS.NET MVC中的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前后如果想再加一些额外的逻辑处理,这样会造成大量代码的重复使用,这不是我们希望的.这时就到了过滤器出场的时候啦. 但是默认实现它们的过滤器只有三种,分别是Authorize(授权),ActionFilter,HandleError(错误处理): 各种信息如下表所示 过滤器 类名 实现接口  描述 ActionFilter  AuthorizeAttribute IAutho…
概念介绍 结果过滤器看名字就知道这个过滤器是针对方法所产生结果的,结果过滤器,主要在我们的动作方法结果返回前后执行. 如果我们需要创建结果过滤器需要实现IResultFilter接口. namespace System.Web.Mvc { // // 摘要: // 定义结果筛选器所需的方法. public interface IResultFilter { // // 摘要: // 在操作结果执行后调用. // // 参数: // filterContext: // 筛选器上下文. void O…
概念介绍 动作过滤器应该是我们平常工作中需要用到最多的过滤器了,动作过滤器,主要在我们的动作方法执行前后执行. 如果我们需要创建动作过滤器需要实现IActionFilter接口. 我们看到该接口里有两个方法OnActionExecuting和OnActionExecuted,前者在动作方法执行前调用,后者在动作方法执行后调用. OnActionExecuting方法 我们已经知道了OnActionExecuting方法实在动作方法调用之前被,调用的那么我们就可以利用这个方法来检测请求,并且可以在…
概念介绍 认证过滤器是MVC5的新特性,它有一个相对复杂的生命周期,它在其他所有过滤器之前运行,我们可以在认证过滤器中创建一个我们定义的认证方法,也可以结合授权过滤器做一个复杂的认证方法,这个方法可以不准守授权规则.认证过滤器还可以在一个动作方法执行后,处理前运行. 如果我们需要创建认证过滤器需要实现IAuthenticationFilter接口. namespace System.Web.Mvc.Filters { // // 摘要: // 定义一个用于执行身份验证的筛选器. public i…
前几天面试遇到这个问题,发现不是很了解,学习了下,这里记录下来 经常需要将用户的操作记录到日志中,或者是验证用户是否登录了网站, 面对这样的需求,以前的操作是自定义一个统一的全局方法,然后做处理, 在每个需要的页面中添加想要的函数调用,这导致了多个页面中存在了大 量重复的代码,这样的方式不太符合软件工程的思想.为了解决这个问题, mvc为我们提供了过滤器来完成对应的功能,通过过滤器,我们只需要将 相应的业务处理代码写一次,再在相应的功能处通过特性的方式来使用写 好的过滤器. 一句话,我们可以用过…
概念介绍 认证过滤器是MVC5的新特性,它有一个相对复杂的生命周期,它在其他所有过滤器之前运行,我们可以在认证过滤器中创建一个我们定义的认证方法,也可以结合授权过滤器做一个复杂的认证方法,这个方法可以不准守授权规则.认证过滤器还可以在一个动作方法执行后,处理前运行. 如果我们需要创建认证过滤器需要实现IAuthenticationFilter接口. namespace System.Web.Mvc.Filters { // // 摘要: // 定义一个用于执行身份验证的筛选器. public i…
先新建一个过滤器ExceptionHandleErrorAttribute.cs 内容如下: using System; using System.Net; using System.Web; using System.Web.Mvc; using ABBPMP.Utility.NLogHelper.Static; namespace ABBPMP.Filter { /// <summary> /// 异常捕获(业务逻辑层,UI层) /// </summary> public cl…
系统未知bug,代码没有深究. 现象:filters.Add(new HandleErrorAttribute()); 使用了全局的异常处理过滤. HandleErrorAttribute 核心代码: public virtual void OnException(ExceptionContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext");…
授权过滤器 概念介绍 在之前的文章中我们已经带大家简单的了解了下过滤器,本次我们开始介绍授权过滤器. 我们之前提到过授权过滤器在认证过滤器之后,其他过滤器和方法被调用之前运行,而授权过滤器和它名字的含义一样主要是负责执行我们的授权逻辑,确保我们要调用的方法只被我们认证过的用户使用. 自定义授权过滤器 首先我们还是用之前创建的MVC项目模板,我们在里面新建一个Filter文件夹,我们的过滤器文件就放在这,接着我们创建一个授权过滤器CustomAuthAttribute 接着我们继承FilterAt…
1.新建类BaseController用于统一所有控制器继承扩展,方便扩展登录等过滤器.示例如下: using CloudWave.JustBeHere.JBH_H5.Controllers.Attribute; using CloudWave.JustBeHere.JBH_H5.Controllers.Authorization; using CloudWave.JustBeHere.JBH_H5.Models.User; using CloudWave.JustBeHere.Web; usi…
一般具有用户模块的系统都需要对用户是否登录进行验证,如果用户登录了就可以继续操作,否则退回用户的登录页面 对于这样的需求我们可以通过自定义一个独立的方法来完成验证的操作,但是这样代码的重复率就大大提高了 对于这样的需求,有一个比较好的解决方案,通过自定义一个全局的过滤器来完成这个操作 这里我们需要实现AuthorizeAttribute特性来完成对用户身份的验证 首先给出自定义的类,通过这个类来实现对用户身份的判断,通过重写HandleUnauthorizedRequest函数 来完成用户验证失…
通过重写OnException方法形式实现. 1.自定义异常记录类并继承HandleErrorAttribute类. public class HandlerErrorAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext context) { base.OnException(context); //context.ExceptionHandled = true; WriteLog…
一.MVC的异常过滤器   1.自定义MVC异常过滤器 创建一个类,继承HandleErrorAttribute即可,如果不需要作为特性使用直接实现IExceptionFilter接口即可, 注意,该接口在System.Web.Mvc 命名空间下   /// <summary> /// 自定义的MVC异常过滤器 /// 可以在Controller或Action上单独使用,也可直接注册为全局过滤器 /// </summary> publicclassMVCExceptionFilte…
一.校验 — 表单不是你想提想提就能提 1.1 DataAnnotations(数据注解) 位于 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据模型中的各个字段的验证.这些特性用于定义常见的验证模式,例如范围检查和必填字段.而 DataAnnotations 特性使 MVC 能够提供客户端和服务器验证检查,使你无需进行额外的编码来控制数据的有效. 通过为模型类增加数据描述的 DataAnnotations ,我们可以容易地为应用程序增加验证…