I need to create an absolute URL to specific files in my ASP.NET MVC 4 application. I am currently doing this by generating a relative path via Url.Content
and then using the following extension method to create the absolute path.
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));
}
When running under the Azure Emulator, the proper URL that I need to create is http://127.0.0.1/myfile.jpg
but when this code executes, the port number comes back as 81 so the URL that is generated is http://127:0.0.1:81/myfile.jpg
. However, if I go to http://127:0.0.1:81/myfile.jpg
it of course doesn't work as the Azure Emulator is listening on port 80, not 81.
I assume this has to do with the built in Azure Emulator/IIS Express load balancer, but I am not sure what change I need to make to my Url.Absolute
method to return an accurate URL.