2011-08-17 6 views
21

ViếtUrl helper cho url đầy đủ trong asp.net MVC-3

@Url.Content("~/Something/Something.html") 

trong dao cạo làm cho

/AppFolder/Something/Something.html 

Có cách nào để làm cho URL đầy đủ như http://www.something.com/AppFolder/Something/Something.html mà không hacks tàn bạo? (như lưu trữ giao thức và miền trong số AppConfig và nối chuỗi vào đó)

Có người trợ giúp như @Url.FullPath("~/asdf/asdf") hoặc tương tự không?

+1

Bạn đã tìm thấy một câu trả lời cho điều này? Tôi đang tìm kiếm điều tương tự! Bất kỳ trợ giúp nào được đánh giá cao. – ETFairfax

+0

Bất kỳ đề xuất nào để sử dụng Url.Action trong Mono? http://stackoverflow.com/questions/30497900/how-to-use-url-action-in-mono – xameeramir

Trả lời

22

@ Url.RouteURL() không yên tĩnh trả lời câu hỏi này. Nó hoạt động cho các tuyến đường được đặt tên nhưng thiếu ngắn cho các đường dẫn ảo tùy ý. Đây là phương pháp trợ giúp nhanh để tạo ra url đầy đủ. Bạn có thể tạo quá tải cho các lược đồ khác nhau (http [s]) tùy thuộc vào mức độ kiểm soát mong muốn.

public static class UrlHelperExtension 
{ 
    public static string ContentFullPath(this UrlHelper url,string virtualPath) 
    { 
     var result = string.Empty; 
     Uri requestUrl = url.RequestContext.HttpContext.Request.Url; 

     result = string.Format("{0}://{1}{2}", 
           requestUrl.Scheme, 
           requestUrl.Authority, 
           VirtualPathUtility.ToAbsolute(virtualPath)); 
     return result; 
    } 
} 
+0

Đó là một câu hỏi cũ! Bạn có thể nhận được một huy hiệu cho điều này: D – SoonDead

24

Xem this blog post để biết câu trả lời.

Về cơ bản, tất cả những gì bạn cần làm bao gồm thông số giao thức, ví dụ:

Url.Action("About", "Home", null, "http") 
+9

Url.Content! = Url.Action – SoonDead

+0

bạn là người hùng của tôi ..... :) – Tom

+0

Đây là một câu trả lời tốt hơn bằng cách sử dụng 'String.Format'. +1 – Yuck

0

Đối với bất kỳ ai cần để xây dựng URL trong WebAPI 2.2 và/hoặc MVC5, điều này đã làm việc cho tôi:

// works in a controller 
var requestUri = this.Request.RequestUri; 
// just the http/s and the hostname; ymmv 
string baseUrl = requestUri.Scheme + "://" + requestUri.Authority + "/"; 
// build your url for whatever purpose you need it for 
string url = baseUrl + "SomeOtherController?id=" + <some_magic_value>;