0

我得到 3 个字符串areacontrolleraction. 其中一些可能有空值,因为在我的路线中定义了默认值。例如,如果action为空,它将被映射到Index.

我希望通过我的应用程序的路由传递这 3 个字符串,并在映射到默认值的任何空值之后获取它们的实际值。这可能吗?

也许通过做这样的事情是可行的

RouteTable.Routes.GetRouteData(context)

但是有没有办法在不构造整个HttpContext对象的情况下做到这一点?

4

1 回答 1

0

您要做的第一件事是获取三个字符串并将其转换为可以通过路由系统传递的 URL。您如何执行此操作取决于您创建了哪些路线。假设您的路由表中有典型的默认路由:

        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { controller="Home", action = "Index", id = UrlParameter.Optional }
        );

然后您必须使用 URL 模式“{area}/{controller}/{action}/{id}”来构建您的 URL。在您的情况下,某些字符串可能为空,因此您的 URL 不会包含所有段。例如,如果 Area="Admin" 且 Controller 和 Action 为空,则基于此路由的 URL 将是:

~/Admin

当然,这提出了一个问题,如果您已经知道系统中的路由,为什么不能通过查看路由来获取默认值。

获得要测试的 URL 后,您需要创建 HttpContentBase 对象的模拟,然后通过 RouteTable.Routes.GetDate(httpContext) 运行它。有简单的样板代码可以做到这一点,因为你真的不需要模拟很多组成的 HttpRequestBase 或 HttpResponseBase 类。例如,有关使用 Moq 模拟框架模拟 HttpContextBase 对象的示例,请参见此处。

于 2013-01-22T23:47:02.390 回答