我有一个MVC4项目,我有一个外部项目,可以发送引用该网站区域的电子邮件。
不是将网址硬编码到电子邮件中,而是希望能够确保我从路由中获取规范网址。我可以引用MVC项目,这意味着我相信我应该能够获得它所拥有的任何编译时间信息(包括路由和事物)。
我设法创建了一个RouteCollection
并用我的路线填充它,但我现在正在努力查询这个集合。我找到的唯一方法是在RouteUrl
上使用UrlHelper
方法,但这需要一个UrlHelper
,其中包含我在创建时遇到问题的相应路由数据。我也希望有更好的方法可用于查询routecollection。
基本上我有这条路线:
routes.MapRoute
(
"ShowBlog",
"blog/{shortcode}/{slug}",
new { controller = "Blog", action = "ShowBlog", shortcode = "", slug = "" }
);
我想要一些像GetUrl("ShowBlog", new {shortcode = "foo", slug="bar"})
这样会返回blog/foo/bar
的代码。
那我怎么能这样做呢?
答案 0 :(得分:1)
如果您可以从测试项目中连接UrlHelper
,则可以从任何其他外部项目执行此操作。但是,您需要在外部项目中注册路由,就像在MVC项目中Application_Start
期间一样。
您还需要模拟HttpContextBase
和RequestContext
,这意味着您的外部项目至少需要知道安装MVC项目的应用程序路径。如果您的外部项目可以像测试项目那样使用模拟库,那么这将更容易。这是否可能?
如果是,here is a link for how to do it with Moq
。您不需要控制器,但可以为HttpContext
,RequestContext
和UrlHelper
使用类似的代码。