在MVC,C#中的每个请求运行一个方法?
在WebForm中,我们可以在MasterPage.cs中编写一个方法,并在每个请求中运行。
例如:
MasterPage.cs -------------- protected void Page_Load(object sender, EventArgs e) { CheckCookie(); }
我们如何在MVC中做这样的事情?
在ASP.NET MVC中,你可以编写一个自定义的全局动作filter 。
更新:
按照评论部分的要求,这里有一个例子说明这样的filter是怎么样的:
public class MyActionFilterAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { var fooCookie = filterContext.HttpContext.Request.Cookies["foo"]; // TODO: do something with the foo cookie } }
如果您想根据cookie的值执行授权,那么实现IAuthorizationFilter接口会更加正确:
public class MyActionFilterAttribute : FilterAttribute, IAuthorizationFilter { public void OnAuthorization(AuthorizationContext filterContext) { var fooCookie = filterContext.HttpContext.Request.Cookies["foo"]; if (fooCookie == null || fooCookie.Value != "foo bar") { filterContext.Result = new HttpUnauthorizedResult(); } } }
如果您希望此操作筛选器针对每个控制器操作的每个请求运行,则可以在RegisterGlobalFilters
方法的global.asax中将其RegisterGlobalFilters
为全局操作筛选器:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new MyActionFilterAttribute()); }
如果你需要这个只执行特定的动作或控制器,只需用这个属性来装饰它们:
[MyActionFilter] public ActionResult SomeAction() { ... }
你可以使用Global.asax Application_AcquireRequestState方法,每个请求都会被调用:
protected void Application_AcquireRequestState(object sender, EventArgs e) { //... }
- 什么是ASP.NET MVC控制器的生命周期?
- entity framework迁移中必填字段的默认值?
- “System.Web.Mvc.MvcWebRazorHostFactory”types的expression式不能用于返回types“System.Web.WebPages.Razor.WebRazorHostFactory”
- asp.net mvc博客引擎
- 在MVC 3中禁用客户端validation“取消”提交button
- 自动编译Linq查询
- 禁用整个ASP.NET网站的浏览器caching
- 在Asp.NET MVC中以dd / mm / yyyy格式显示date时间值
- 什么时候应该使用Html Helpers,Razor Helpers或Partial Views?