Asp.Net Абсолютный путь URL - PullRequest
       5

Asp.Net Абсолютный путь URL

49 голосов
/ 20 февраля 2009

Чтобы веб-приложению было проще обмениваться файлами с другим приложением на другом сервере, я использую базовый тег href на своей главной странице. Как многие люди обнаружили, это нарушает пути веб-формы. У меня есть рабочий класс адаптера формы, но я не уверен, как получить абсолютный путь URL. В настоящее время моя программа жестко запрограммирована на использование чего-то похожего на:

HttpContext Context = HttpContext.Current;
value = "http://localhost" + Context.Request.RawUrl;

Стоит отметить, что в настоящее время я тестирую на своем локальном сервере IIS, поэтому есть много странных тенденций, которые я пытался использовать, чтобы абсолютный путь не включал доменное имя (мой локальный IIS внешне не видно). Это означает, что это не абсолютный путь, и поэтому базовый href разрушит его.

Есть ли хороший способ справиться с этим, чтобы он работал локально без жесткого кодирования, но также работал правильно при загрузке на сервер? Я бы предпочел избегать всего, что связано с выполнением чего-то другого на серверной копии.

Да, я понимаю, что могу использовать отдельные файлы web.config локально и на сервере, чтобы получить эту информацию, но это ужасно и нарушает СУХОЙ.

Ответы [ 4 ]

111 голосов
/ 20 февраля 2009

Я использовал это в прошлом:

// Gets the base url in the following format: 
// "http(s)://domain(:port)/AppPath"
HttpContext.Current.Request.Url.Scheme 
    + "://"
    + HttpContext.Current.Request.Url.Authority 
    + HttpContext.Current.Request.ApplicationPath;
3 голосов
/ 22 октября 2015

Старый пост, но вот еще один немного менее многословный метод

var baseUri = new Uri(HttpContext.Current.Request.Url, "/");
0 голосов
/ 02 ноября 2016

Я использовал следующее, и оно работало для меня и клиента, и сервера.

string surl = string.Format("{0}://{1}",
    HttpContext.Current.Request.Url.Scheme,
    HttpContext.Current.Request.Url.Authority);
0 голосов
/ 21 мая 2012

код:

string loginUrl = Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/") + "Login/Login.aspx?UserName=" + LoggedinUser["UserName"] + "&Password=" + LoggedinUser["Password"];
...