2011-08-17 17 views
21

PisanieUrl pomocnika do pełnego adresu URL w ASP.NET MVC-3

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

w maszynce renderuje

/AppFolder/Something/Something.html 

Czy istnieje sposób, aby uczynić pełny adres URL jak http://www.something.com/AppFolder/Something/Something.html bez potwornych hacki? (jak przechowywanie protokołu i domeny w AppConfig i łączenie z nią ciągu)

Czy istnieje pomocnik taki jak @Url.FullPath("~/asdf/asdf") lub podobny?

+1

Znalazłeś odpowiedź na to? Szukam tego samego! Każda pomoc doceniona. – ETFairfax

+0

Wszelkie sugestie dotyczące użycia Url.Action w Mono? http://stackoverflow.com/questions/30497900/how-to-use-url-action-in-mono – xameeramir

Odpowiedz

22

@ Url.RouteURL() nie odpowiada na to pytanie. Działa to w przypadku nazwanych tras, ale nie odpowiada arbitralnym ścieżkom wirtualnym. Oto szybka metoda pomocnicza, która generuje pełny adres URL wychodzący. Można tworzyć przeciążenia dla różnych schematów (http [s]) w zależności od wymaganego stopnia kontroli.

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

To było stare pytanie! Możesz otrzymać odznakę: D – SoonDead

24

Aby uzyskać odpowiedź, patrz this blog post.

Zasadniczo wszystko, co musisz zrobić, to parametr protokołu np.

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

Url.Content! = Url.Action – SoonDead

+0

jesteś moim bohaterem ..... :) – Tom

+0

To jest lepsza odpowiedź niż przy użyciu 'String.Format'. +1 – Yuck

0

Dla każdego, która chciałaby zbudować URL w WebAPI 2.2 i/lub MVC5 ten pracował dla mnie:

// 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>;