Potrzebuję utworzyć bezwzględny adres URL do określonych plików w mojej aplikacji ASP.NET MVC 4. Obecnie robię to poprzez wygenerowanie względnej ścieżki przez Url.Content
, a następnie za pomocą poniższej metody rozszerzenia utworzyć ścieżkę bezwzględną.Tworzenie prawidłowego bezwzględnego adresu URL podczas uruchamiania aplikacji ASP.NET MVC w programie Visual Studio Emulator Windows Azure
public static string Absolute(this UrlHelper url, string relativeUrl)
{
var request = url.RequestContext.HttpContext.Request;
return string.Format("{0}://{1}{2}{3}",
(request.IsSecureConnection) ? "https" : "http",
request.Url.Host,
(request.Url.Port == 80) ? "" : ":" + request.Url.Port,
VirtualPathUtility.ToAbsolute(relativeUrl));
}
Podczas pracy pod Azure Emulator, właściwy adres, który trzeba utworzyć jest http://127.0.0.1/myfile.jpg
ale po wykonaniu tego kodu, numer portu wraca jako 81 tak URL, który jest generowany jest http://127:0.0.1:81/myfile.jpg
. Jeśli jednak przejdę do wersji http://127:0.0.1:81/myfile.jpg
, to oczywiście nie działa, ponieważ emulator platformy Azure nasłuchuje na porcie 80, a nie 81.
Zakładam, że ma to związek z wbudowanym modułem równoważenia obciążenia Azure Emulator/IIS Express, ale Nie jestem pewien, jaką zmianę muszę wprowadzić w mojej metodzie, aby zwrócić dokładny adres URL.
Czy nagłówek hosta zawiera również numer portu, jeśli istnieje? na przykład. jeśli aplikacja zostanie prawidłowo wdrożona pod adresem http://www.contoso.com:999/ nagłówek będzie "www.contoso.com:999"? – user2719100
Tak. zobacz http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23 – haim770