我有一个RouteCollection
和一个带URL的字符串。
有谁知道如何获得将要执行的路线的名称?
某些方法(如RouteCollection.PredictRoute(url)
)将返回路径名称或将要执行的物理文件。
我想从Web服务器日志文件创建一些统计信息。将重复使用的RouteCollection
用于该统计数据将非常好。
非常感谢!
答案 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对象。