ASP.NET MVC - 在没有Http /请求上下文的情况下生成路由

时间:2009-12-18 22:30:48

标签: asp.net-mvc routing httpcontext

我希望能够从RouteCollection生成URL而无需访问HttpContext。查看RouteCollection的实现方式,所有方法都需要访问RequestContext才能获取虚拟路径。

我通过模拟HttpContext解决了这个问题,但这增加了对RhinoMocks的尴尬依赖,并不是一个合理的解决方案。我是否有其他选项可以在上下文之外生成Urls?

2 个答案:

答案 0 :(得分:3)

确实是一个很好的问题。路由本身确实有一些依赖于从正在运行的ASP.NET应用程序调用,例如获取应用程序根URL以及任何无cookie表格或会话cookie也在URL中。虽然创建模拟对象是一种理论解决方案,但当然不建议在运行时使用它。

我建议不要在这种情况下使用路由,并将URL硬编码到电子邮件中。电子邮件中的链接必须具有完全限定的URL(主机名+路径),并且路由甚至无法生成URL的主机名,因此您必须进行硬编码。

答案 1 :(得分:1)

抱歉,但习惯于在MVC框架中进行模拟。一旦进入测试阶段,您就会需要它。那里有很多:HttpContext,Session,Server - 所有泄漏到控制器中的东西。如果你想生成路径,你需要和HttpContext交谈(在MVC中,这实际上是HttpContextBase,所以你可以编写自己的具体实现),或者你需要模拟它。