Tôi cần phải tạo một URL tuyệt đối cho các tệp cụ thể trong ứng dụng ASP.NET MVC 4 của tôi. Tôi hiện đang thực hiện việc này bằng cách tạo đường dẫn tương đối qua Url.Content
và sau đó sử dụng phương pháp mở rộng sau để tạo đường dẫn tuyệt đối.Tạo URL tuyệt đối chính xác khi chạy ứng dụng ASP.NET MVC trong Visual Studio Windows Azure Emulator
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));
}
Khi chạy dưới Azure Emulator, URL thích hợp mà tôi cần phải tạo ra là http://127.0.0.1/myfile.jpg
nhưng khi mã này thực hiện, số cổng trở lại như 81 vì vậy các URL được tạo ra là http://127:0.0.1:81/myfile.jpg
. Tuy nhiên, nếu tôi truy cập vào http://127:0.0.1:81/myfile.jpg
, tất nhiên không hoạt động như Trình mô phỏng Azure đang nghe trên cổng 80, không phải 81.
Tôi giả định điều này phải thực hiện với bộ cân bằng tải Azure Emulator/IIS Express, nhưng Tôi không chắc chắn mình cần phải thực hiện thay đổi gì đối với phương thức Url.Absolute
của mình để trả lại URL chính xác.
Tiêu đề máy chủ cũng sẽ bao gồm số cổng nếu nó tồn tại? ví dụ. nếu ứng dụng được triển khai hợp pháp tại, ví dụ: http://www.contoso.com:999/ tiêu đề sẽ là "www.contoso.com:999"? – user2719100
Có. xem http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23 – haim770