相关疑难解决方法(0)

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

我正在测试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的内部,但这是唯一的方法,因为它真的没有考虑到这种可测试性.即使是暴露一些内部类或方法等简单的事情也会有很大帮助!

asp.net-mvc asp.net-mvc-routing attributerouting asp.net-mvc-5.1

11
推荐指数
1
解决办法
1312
查看次数

可以测试具有属性路由的ASP.NET MVC项目吗?

我花了几天时间试图模仿,存根并假冒我的方式进入可测试的应用程序.我通常不测试控制器操作,而是测试我所有的其他类和模式.

我点击的墙是新的属性路由功能.虽然我可以使用路由类来注册我的规则等.我在MapMvcAttributeRoutes调用时会收到此错误.

在应用程序的预启动初始化阶段期间无法调用此方法

这在这里讨论.

MapMvcAttributeRoutes:在应用程序的启动前初始化阶段,无法调用此方法

说实话,我无法理解答案.不是代码,而是碎片化为版本,链接到其他错误,GitHub等.

关于底线答案,我有点迷茫:

截至2014年10月23日.是否可以在测试条件下注册所有路由,我需要什么版本的MVC以及我要调用哪些类/方法?

目前,我的课程使用UrlHelper正在搞砸,因为缺少必要的路线.我正在注入子类以绕过这个问题,但我认为假冒运行时MVC环境并让我的应用程序在没有大量DI杂技的情况下运行是不合理的.

如果这些是框架本身中的一个简单帮助器,可以采用描述原始HTTP请求的JSON对象,并且控制器,HttpContext,ControllerContext等等都可以正确创建,就像它是一个真正的请求一样,这将是很好的. .

谢谢,

卢克

c# asp.net asp.net-mvc unit-testing

10
推荐指数
1
解决办法
1269
查看次数