9

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

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

4

2 回答 2

3

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

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

于 2009-12-30T20:09:41.690 回答
1

抱歉,但习惯于在 MVC 框架中模拟。一旦你开始测试,你就会需要它。那里有很多东西:HttpContext、Session、Server——所有东西都会泄漏到你的控制器中。如果要生成路径,要么需要与 HttpContext 对话(在 MVC 中,这实际上是 HttpContextBase,所以我猜你可以编写自己的具体实现),或者需要模拟它。

于 2009-12-18T22:36:16.333 回答