2016-12-30 6 views
0

Прошу прощения, если это немного запутанно, но я просто пытаюсь лучше понять, как работает Url.RouteUrl() в среде C# .Net.Могу ли я установить имя домена при использовании Url.RouteUrl()?

У меня есть приложение, которое развертывается на двух отдельных серверах через функциональность Publish 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

Перегрузка, которую вы используете, подвержена ошибкам, я бы предложил использовать перегрузку this.

Сохраните хост в файле веб-конфигурации, который отличается для обеих сред. И передайте это в параметре хоста.

//// перегружать использовать

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"); 
+0

Это то, что я искал. Спасибо! – user2170742

+0

Рад, что это помогло. – mfahadi