asp.net-mvc中的HTTP模块与操作筛选器
我正在asp.net MVC3中开发一个应用程序,我有以下问题: 我应该什么时候写HTTP模块,什么时候写动作过滤器asp.net-mvc中的HTTP模块与操作筛选器,asp.net-mvc,httpmodule,action-filter,Asp.net Mvc,Httpmodule,Action Filter,我正在asp.net MVC3中开发一个应用程序,我有以下问题: 我应该什么时候写HTTP模块,什么时候写动作过滤器 过滤器更多的是MVC方式,而Http模块更多的是ASP.NET方式。两者的作用相似,都是在加工管线上提供挂钩 HttpModule更通用,当您希望在每个请求上处理某些事情时。过滤器对于添加特定于操作的行为非常有用 如果希望某件事情在每个Http请求中只执行一次,那么应该使用HttpModule。ActionFilter可能在请求期间执行多次,直到和除非您选中IsChildActi
参考:
示例:将非www重定向到www URL
public void Init(HttpApplication application)
{
application.PreRequestHandlerExecute += this.Application_PreRequestHandlerExecute;
}
private void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
Uri requestUrl = HttpContext.Current.Request.Url;
string host = requestUrl.Authority.ToLower();
if (!host.StartsWith("www"))
{
HttpContext.Current.Response.Redirect(requestUrl.Scheme + "://www." + host + requestUrl.PathAndQuery);
HttpContext.Current.Response.End();
}
}
动作过滤器是修饰控制器或动作方法的属性。它是MVC路由和操作方法之间的抽象层。使用动作过滤器,我们可以将相同的逻辑应用于多个控制器或动作方法。例如,在请求处理程序执行前后调用自定义日志记录。HttpModule。它们旨在使开发人员能够拦截、参与或修改每个请求。可以订阅22个可用事件,使模块能够在流程的各个阶段处理请求。这些事件对于希望在引发键请求管道事件时运行代码的页面开发人员非常有用。如果您正在开发自定义模块,并且希望对管道的所有请求调用该模块,那么它们也很有用 过滤器设计用于在MVC请求生命周期之间注入逻辑。特别是在调用反操作之前和之后,以及在处理结果之前和之后。过滤器为用户提供了强大的方法来检查、分析、捕获和检测MVC项目中的一些事情。自MVC5起,共有5种类型的过滤器:
- 认证
- 授权书
- 行动
- 结果
- 例外情况
- OnActionExecuting
- OnActionExecuted
- OnResultExecuting
- OnResultExecuted