根据来自外部MVC项目的路径数据获取规范URL

时间:2013-11-06 12:24:50

标签: c# asp.net-mvc asp.net-mvc-4

我有一个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的代码。

那我怎么能这样做呢?

1 个答案:

答案 0 :(得分:1)

如果您可以从测试项目中连接UrlHelper,则可以从任何其他外部项目执行此操作。但是,您需要在外部项目中注册路由,就像在MVC项目中Application_Start期间一样。

您还需要模拟HttpContextBaseRequestContext,这意味着您的外部项目至少需要知道安装MVC项目的应用程序路径。如果您的外部项目可以像测试项目那样使用模拟库,那么这将更容易。这是否可能?

如果是,here is a link for how to do it with Moq。您不需要控制器,但可以为HttpContextRequestContextUrlHelper使用类似的代码。