第13章_了解MVC3中Filters(第一篇)过滤器

各们同学,先请看MVC2过滤器和MVC3过滤器的区别!

1.例如,如果我们使用AJAX,发送重定向可能会导致登录

出现在 中间 的 用户 浏览 任何网页 的 页面 。 幸运的是, 我们 可以重写

HandleUnauthorizedRequest AuthorizeAttribute类创建自定义策略的方法。
namespace MvcFilters.Infrastructure.Filters {
public class AjaxAuthorizeAttribute : AuthorizeAttribute {
protected override void HandleUnauthorizedRequest(AuthorizationContext context) {
if (context.HttpContext.Request.IsAjaxRequest()) {
UrlHelper urlHelper = new UrlHelper(context.RequestContext);
context.Result = new JsonResult {
Data = new {
Error = "NotAuthorized",
LogOnUrl = urlHelper.Action("LogOn", "Account")
}, JsonRequestBehavior = JsonRequestBehavior.AllowGet};
} else {
base.HandleUnauthorizedRequest(context);
}
}
}
}

2.Exception Filter
public class MyExceptionAttribute: FilterAttribute, IExceptionFilter {
public void OnException(ExceptionContext filterContext) {
if (!filterContext.ExceptionHandled &&
filterContext.Exception is NullReferenceException) {
filterContext.Result = new RedirectResult("/SpecialErrorPage.html");
filterContext.ExceptionHandled = true;
}
}
}



3.使用HandleErrorAttribute过滤器

[HandleError(ExceptionType=typeof(NullReferenceException), View="SpecialError")]
public ActionResult Index() {}

注意HandleErrorAttribute过滤器的工作原理,只有当在Web.config中启用自定义错误
文件 - 例如,通过添加<customErrors mode="On"/>内的<system.web>节点。默认的自定义
错误模式仅限远程的,这意味着,在发展过程中,HandleErrorAttribute不会拦截
例外,但是当你部署到生产服务器,并从另一台计算机的请求,
HandleErrorAttribute将生效。要看到最终用户将会看到,确保你设置的自定义
错误模式为开。

4.行为和结果过滤器

public interface IActionFilter {
void OnActionExecuting(ActionExecutingContext filterContext);//调用OnActionExecuting的方法
动作方法之前被调用
void OnActionExecuted(ActionExecutedContext filterContext);//OnActionExecuted的方法后,该操作方法
被调用
OnResultExecuting

OnResultExecuted

}


在OnActionExecuting取消请求

public class MyActionFilterAttribute : FilterAttribute, IActionFilter {
public void OnActionExecuting(ActionExecutingContext filterContext) {
if (!filterContext.HttpContext.Request.IsSecureConnection) {
filterContext.Result = new HttpNotFoundResult();
}
}
public void OnActionExecuted(ActionExecutedContext filterContext) {
// do nothing
}

常用的IAuthorizationFilter,IActionFilter,IResultFilter,和IExceptionFilter接口。


5.全局过滤器适用于所有在您的应用程序中的行动方法。我们使之成为一个普通的过滤器
全局过滤器通过在Global.asax RegisterGlobalFilters方法

public class MvcApplication : System.Web.HttpApplication {
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new HandleErrorAttribute());
filters.Add(new ProfileAllAttribute());
filters.Add(new HandleErrorAttribute() {

//这也是一种方式

filters.Add(new HandleErrorAttribute() {
ExceptionType = typeof(NullReferenceException),
View = "SpecialError"
});

}

订购过滤器执行
namespace MvcFilters.Infrastructure.Filters {
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple=true)]
public class SimpleMessageAttribute : FilterAttribute, IActionFilter {
public string Message { get; set; }//属性
public void OnActionExecuting(ActionExecutingContext filterContext) {
filterContext.HttpContext.Response.Write(
string.Format("[Before Action: {0}]", Message));
}
public void OnActionExecuted(ActionExecutedContext filterContext) {
filterContext.HttpContext.Response.Write(
string.Format("[After Action: {0}]", Message));
}
}
}


在过滤器中使用的顺序属性请看第二篇。谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值