我可以在使用Url.RouteUrl()时设置域名吗?

时间:2016-12-30 19:14:05

标签: c# .net url-routing

我很抱歉,如果这有点令人费解,但我只是想更好地了解Url.RouteUrl()在C#.Net环境中的运作方式。

我有一个应用程序通过Publish Web功能部署到两个单独的服务器;一个用于测试,另一个用于现场制作。实时生产服务器面向Web - 这意味着它可以通过注册域访问。测试服务器是内部的,只能通过网络访问。

此应用程序的一个功能是发送一封电子邮件,其中包含链接到应用程序中特定页面的URL。它使用类似于:

的内容获取此URL
Url.RouteUrl("Default", new { controller = "foo", action = "bar"}, "http");

这解析为使用内部服务器地址构建的URL,无论它是测试服务器还是生产服务器。

我希望能够解决测试部署的内部服务器地址和生产部署的注册域名,但我似乎无法弄清楚正在建立这些领域。

我已经检查了部署设置(发布),但它们似乎是按照我的预期正确编写的。

最终我正在寻找的结果将是:

Testing:: http://testserver.internal.domain/foo/bar
Production:: http://www.example.com/foo/bar

有人可以向我解释在Url.RouteUrl()方法中调用域名地址的位置以及如何根据我的需要对其进行更改吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您使用的重载容易出错,我建议使用this重载。

将主机保存在Web配置文件中,两种环境都不同。并在主机参数中传递。

////重载使用

public virtual string RouteUrl(
    string routeName,
    RouteValueDictionary routeValues,
    string protocol,
    string hostName
)

示例用法。 1.测试 2.生产

Url.RouteUrl("Default", new RouteValueDictionary(new { action = "foo", controller = "bar" }),
"http", "test.local.url" );


Url.RouteUrl("Default", new RouteValueDictionary(new { action = "foo", controller = "bar" }),
"http", "production.public.url" );