如何在RouteCollectionRoute中找到正确的路线?

Ant*_*ony 11 asp.net-mvc asp.net-mvc-routing attributerouting asp.net-mvc-5.1

我正在测试ASP MVC路由.我在ASP MVC 5.1中遇到属性路由问题

当我有这样的控制器时:

public class FooController : Controller
{
    [Route("foo")]
    [HttpGet]
    public ActionResult Get()
    {
      .... 
    }

    [Route("foo")]
    [HttpPost]
    public ActionResult Post()
    {
      .... 
    }
}
Run Code Online (Sandbox Code Playgroud)

然后为了测试哪个路由匹配特定请求,我打电话routes.GetRouteData.我得到一个System.Web.Routing.RouteData包含路由以及应该说明哪个控制器和操作匹配的值.

问题是这个路由现在是RouteCollectionRoute的一个实例, 这个内部类是这两个动作的一组路由的包装器.控制器在RouteData.values,但行动不是.你可以得到这些包含的路线routeData.Values["MS_DirectRouteMatches"] as IList<RouteData>.

在给出的示例中,列表中将有两个路径,用于两个操作方法.我需要知道哪些包含的路由实际匹配,以便我可以读取匹配路由的操作方法名称.我该如何解决这条路线?

我有点不知所措的设计选择RouteCollectionRoute.路由时,您有一个路由集合,然后通过调用解析URL的路由GetRouteData.现在你有一条路线.但如果它是一个RouteCollectionRoute如此仍然是路线的集合和路线解决尚未结束.有一个RouteCollectionRoute获得了什么?路线解决现在是一个两步过程吗?还是一个递归过程?

我知道我正在浏览ASP MVC的内部,但这是唯一的方法,因为它真的没有考虑到这种可测试性.即使是暴露一些内部类或方法等简单的事情也会有很大帮助!

Jam*_*sen 0

@Anthony,如果您只想查看任何给定 URL 遵循的路由,则加载Cobisi 路由助手扩展。

在 Visual Studio IDE 中,转到“工具”->“扩展管理器...”。然后,确保已选择“在线图库”选项卡并在搜索框中键入“cobisi”。安装扩展程序后,您将在“工具”菜单中看到一个名为 Cobisi(自然)的新项目。

选择 URL 映射器,如果项目抱怨项目被锁定,则解锁该项目,然后输入 URL。当您单击“地图”按钮时,您将看到 URL 的路由方式。恕我直言,如果您遇到路由问题,那就太棒了。