2013-01-21 64 views
0

我给出3个字符串:area,controlleraction。其中一些可能具有空值,因为在我的路线中定义了默认值。例如,如果action为空,它将映射到Index映射区域,控制器和操作名称为空时为默认值

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

也许这是做这样的事情

RouteTable.Routes.GetRouteData(context) 

可行的,但有没有办法做到这一点无需构建一个整体HttpContext对象?

+0

帕诺斯,我试着回答你的问题。如果你可以提供更多关于你为什么试图做这样的事情的背景以及为什么你需要这样做,那会很有帮助。 –

回答

0

你需要做的第一件事就是把你的三个字符串转换成一个可以通过路由系统传递的URL。你如何做到这一点取决于你创建的路线。让我们假设你在你的路由表中的典型的默认路由:

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

然后,你将不得不使用URL模式“{面积}/{控制器}/{行动}/{ID}”建立你的URL。在你的情况下,一些字符串可能是空的,所以你的URL不会包含所有的段。例如,如果面积=“管理员”和控制器和动作都是空的,您的网址,根据这条路线,将是:

~/Admin 

当然,这引起的,如果你已经知道的路由问题你系统,为什么你不能通过查看路线来获得默认值。

一旦你有你想测试的URL,你将需要创建一个HttpContentBase对象的模拟,然后通过RouteTable.Routes.GetDate(httpContext)运行它。有直接的锅炉板代码来做到这一点,因为你真的不需要嘲笑组成HttpRequestBase或HttpResponseBase类的大部分。例如,有关使用Moq模拟框架模拟HttpContextBase对象的示例,请参见here

相关问题