我想在 ControllerName 和 Action 解析之后、但在请求得到服务之前(即在它到达适当的操作之前)拦截进入我的 MVC 应用程序的每个请求。
我想到了两种方法:
1)我可以编写一个 HttpModule
来拦截每个传入的 HttpRequest
,读取 HttpContext.Request.AbsoluteUrl
(或某些此类)属性,然后假设我配置的路由永远不会改变(这是我想避免的假设,否则我会这样做),并推断 Controller 和操作的名称被调用。
但是,我正在寻找一种更可靠的方法。因此下面的(2)。
2) 我假设 MVC 在实例化正确的 Controller 之前已经为我完成了这一工作。我想知道它在哪里执行此操作,以便我可以重用它的工作。我什么时候可以获取此信息、拦截请求并在请求到达操作之前对其执行某些操作?
最佳答案
您可以创建一个 global action filter
您可以在其中访问 Controller 和操作:
public class MyGlobalActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string controller = filterContext.RouteData.GetRequiredString("controller");
string action = filterContext.RouteData.GetRequiredString("action");
// do something with those variables ...
}
}
在运行每个 Controller 操作之前,将调用 OnActionExecuting
方法,您将能够从 RouteData 中检索要查找的信息。
然后只需在 Application_Start
中注册全局操作过滤器即可:
GlobalFilters.Filters.Add(new MyGlobalActionFilter());
关于asp.net - 在处理请求之前找出 Controller 的名称和操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14602059/