ASP.NET路由:预测将执行哪条路由

时间:2013-05-26 16:12:20

标签: c# asp.net

我有一个RouteCollection和一个带URL的字符串。 有谁知道如何获得将要执行的路线的名称?

某些方法(如RouteCollection.PredictRoute(url))将返回路径名称或将要执行的物理文件。

我想从Web服务器日志文件创建一些统计信息。将重复使用的RouteCollection用于该统计数据将非常好。

非常感谢!

2 个答案:

答案 0 :(得分:0)

我假设您希望在MVC应用程序之外执行此操作,其中请求和上下文不可用(仅提供日志文件,如您所述)。

不幸的是,这并不容易。为了编写这样的匹配方法,您需要重用(或更糟糕的是,重写)用于在名称空间System.Web.Http.Routing中的各种类中找到的URL解析的MVC框架代码。根据Apache 2.0许可证,源代码可在CodePlex上获得。

相反,我认为您可以更轻松地在日志文件中包含路由名称,并在以后的统计信息中使用它们。看看下面。

您可以做的是扩展默认的MvcHandler类并覆盖其ProcessRequest方法。在那里,你可以使用RequestContext.RouteData调用基类实现,然后调用它。

除了其他内容之外,类RouteData还包含当前路由(您在路由集合中定义。可以通过RouteData.Route属性访问。

这是有效的,因为MvcHandler始终委托MvcRouteHandler(除非您已创建自己的MVC基础架构),以处理每个请求的处理。它是从现有路由数据中获取控制器数据的实例,实例化IController实现,并最终执行它。

答案 1 :(得分:0)

以下是我用来测试URL被映射到正确控制器和操作的代码片段。您也应该能够检查路线名称。

RouteConfig.RegisterRoutes(routes);
RouteData routeData = routes.GetRouteData(context);
string controller = routeData.Values["controller"];
string action = routeData.Values["action"];

变量routes是RouteCollection对象,context是HttpContextBase对象。