您要做的第一件事是获取三个字符串并将其转换为可以通过路由系统传递的 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 对象的示例,请参见此处。