Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于来自外部MVC项目的路由数据获取规范url_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 基于来自外部MVC项目的路由数据获取规范url

C# 基于来自外部MVC项目的路由数据获取规范url,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我有一个MVC4项目,我有一个外部项目,发送电子邮件,涉及该网站的地区 与将url硬编码到电子邮件中不同,我希望能够确保从路由中获得规范的url。我可以参考MVC项目,这意味着我相信我应该能够获得它拥有的任何编译时信息(包括路由和其他信息) 我已经设法创建了一个RouteCollection,并用我的路由填充它,但我现在正在努力解决如何查询此集合的问题。我找到的唯一方法是UrlHelper上的RouteUrl方法,但这需要一个UrlHelper以及我创建的相应路由数据。我还希望有更好的方法来查询

我有一个MVC4项目,我有一个外部项目,发送电子邮件,涉及该网站的地区

与将url硬编码到电子邮件中不同,我希望能够确保从路由中获得规范的url。我可以参考MVC项目,这意味着我相信我应该能够获得它拥有的任何编译时信息(包括路由和其他信息)

我已经设法创建了一个
RouteCollection
,并用我的路由填充它,但我现在正在努力解决如何查询此集合的问题。我找到的唯一方法是
UrlHelper
上的
RouteUrl
方法,但这需要一个
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


那么我该怎么做呢?

如果您可以从测试项目连接一个
UrlHelper
,那么您可以从任何其他外部项目进行连接。但是,您需要在外部项目中注册路由,就像在MVC项目中的
Application\u Start
期间一样

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


如果是的话。您不需要控制器,但是您可以为您的
HttpContext
RequestContext
UrlHelper

使用类似的代码,假设外部项目是.NET项目?您可以在其中包含
System.Web.Routing
System.Web.Mvc
库吗?如果是这样的话,我想你应该能够fenagle一个正在工作的
UrlHelper
。为了其他人的利益,你已经给了我一个答案)外部项目确实也是.NET。外部项目实际上是一个web服务,所以我有点担心在其中注册路由。不过,使用模拟库可能会使我能够更好地完成一些事情,因为创建UrlHelper是当前的一大难题。Moq链接可能也非常有用,因为我们已经在测试中使用了Moq。这非常有效。我不得不模拟更多的方法,但是对UrlHelper创建的模拟非常有效。现在我需要担心在生产代码中使用mock是否会让我发疯哈哈!嘿,任何工具都能快速、轻松、廉价地完成任务,对吗?只要告诉自己,当它开始让你发疯的时候。至于路由,您可以在web服务中安全地注册MVC路由。只需使用一个新的RouteCollection而不是RouteTable.Routes来映射它们,它应该被很好地封装起来。最后,就使用其他东西的负载而言,这种方法似乎有点偏离常规,所以我只想使用一种稍微粗糙一点的方法来获取url模式,并用参数和诸如此类。这可能是一个有点不健全,但我们不应该经常改变路线,所以这一切都应该是好的。。。不过我喜欢这个解决方案。我确实很喜欢它,即使它看起来好像无法进入生活的代码。