Asp.net mvc 3 mvc3:确定url是否会导致控制器的执行
我正在global.asaxAsp.net mvc 3 mvc3:确定url是否会导致控制器的执行,asp.net-mvc-3,routes,Asp.net Mvc 3,Routes,我正在global.asax应用程序\u AcquisiteRequestState事件中执行一些作业,并且我只希望在当前url(HttpContext.current.Request.url)与任何注册路由匹配时执行该作业 事实上,我不想为图像、JavaScript或任何其他文件上的请求执行代码 所以问题是:有没有一种简单的方法可以根据routes集合测试给定的url,只知道它是否匹配任何路由。我不需要知道它匹配哪条路线,只要一个对或错就行了 编辑 来自archil的答案是可行的,但几乎所有的
应用程序\u AcquisiteRequestState
事件中执行一些作业,并且我只希望在当前url(HttpContext.current.Request.url
)与任何注册路由匹配时执行该作业
事实上,我不想为图像、JavaScript或任何其他文件上的请求执行代码
所以问题是:有没有一种简单的方法可以根据routes集合测试给定的url,只知道它是否匹配任何路由。我不需要知道它匹配哪条路线,只要一个对或错就行了
编辑
来自archil的答案是可行的,但几乎所有的url都与路由匹配。这使我意识到我的问题是不正确的。如果知道给定的url是否会以某种方式导致控制器的执行,我想要的是什么。/Content/site.css上的请求可能与路由匹配,但不会执行控制器。类似于这些内容的内容
void Application_AcquireRequestState(Object sender, EventArgs e)
{
var httpContextWrapper = new System.Web.HttpContextWrapper(Context);
bool isMatch = false;
foreach (var item in RouteTable.Routes)
{
if (item.GetRouteData(httpContextWrapper) != null)
{
isMatch = true;
break;
}
}
}
来自RouteBase.GetRouteData摘要
// An object that contains the values from the route definition if the route
// matches the current request, or null if the route does not match the request.
public abstract RouteData GetRouteData(HttpContextBase httpContext);
更新:
为了按路由处理程序(即,将由mvc框架处理的URL,而不是对应于css和js文件的URL)进行过滤,我添加了检查RouteData.RouteHandler
void Application_AcquireRequestState(Object sender, EventArgs e)
{
var httpContextWrapper = new System.Web.HttpContextWrapper(Context);
bool isMatch = false;
foreach (var item in RouteTable.Routes)
{
RouteData routeData = null;
if ((routeData = item.GetRouteData(httpContextWrapper)) != null && routeData.RouteHandler.GetType().Equals(typeof(MvcRouteHandler)))
{
isMatch = true;
break;
}
}
}
我终于发现了一些有用的东西:
private static bool IsRoutedRequest()
{
IHttpHandler handler = HttpContext.Current.Handler;
return handler != null && handler is MvcHandler;
}
您的代码似乎工作得很好,但通过尝试,我意识到这不是我所需要的。我的目标是只处理将由控制器处理的whit URL。reqest“”与规则匹配,但不会实例化控制器。我会更新我的问题。