2010-01-15 10 views
28

Ich möchte vollständige URL (mit Domänennamen usw.) von jeder Datei in MVC generieren. Beispiel: Eine .jpg Datei oder eine exe Datei.Vollständige URL jeder Datei in ASP.NET MVC

Beispiel: Wenn ich "~/images/abc.jpg" geben sollte zurückgeben "http://www.mywebsite.com/images/abc.jpg"

Ich bin mir der Url.Action Überlastung, die das Protokoll als Parameter annimmt. Aber Url.Action kann nur für Aktionen verwendet werden.

Ich möchte etwas wie Url.Content Funktion, die Protokoll als Parameter übernimmt.

Wissen Sie, ob eine Methode, um vollständige URL von jeder Datei zu erhalten?

Ich habe versucht: VirtualPathUtility.ToAbsolute, ResolveClientUrl, ResolveUrl aber alle diese scheinen nicht zu funktionieren.

Antwort

46

Sie können den folgenden Code verwenden, um "~ /" zu entfernen, um URL zu absorbieren.

System.Web.VirtualPathUtility.ToAbsolute("~/") 

Edit:

Zuerst müssen Sie eine Methode definieren.

public static string ResolveServerUrl(string serverUrl, bool forceHttps) 
{ 
    if (serverUrl.IndexOf("://") > -1) 
     return serverUrl; 

    string newUrl = serverUrl; 
    Uri originalUri = System.Web.HttpContext.Current.Request.Url; 
    newUrl = (forceHttps ? "https" : originalUri.Scheme) + 
     "://" + originalUri.Authority + newUrl; 
    return newUrl; 
} 

Jetzt rufen Sie diese Methode wird die komplette Absolure URL zurück.

ResolveServerUrl(VirtualPathUtility.ToAbsolute("~/images/image1.gif"),false)) 

wird der Ausgang http://www.yourdomainname.com/images/image1.gif

+2

Der obige Code gibt "/". Das ist es. Nicht der Domain-Name mit Protokoll wie http: // www.mywebsite/ –

+0

Ich habe die Antwort aktualisiert. jetzt wird es die requirment erfüllen – Adeel

+0

Ja, Danke. Referenz: http://www.west-wind.com/Weblog/posts/154812.aspx –

-6

Try Verwendung dieses sein.

Url.Action("~/images/image1.gif", "/", null, Request.Url.Scheme) 
+2

OP sprach über Probleme im Zusammenhang mit dieser genauen Lösung. Die richtige Antwort auf diese Frage wurde 2 Stunden nachdem die Frage vor 3 Jahren gestellt wurde ... – OGHaza

56
new Uri(Request.Url, Url.Content("~/images/image1.gif")) 
+1

Ich bin mir nicht sicher, welcher der effizienteste Weg ist, aber ich finde dies die einfachste Methode zu verwenden und zu erinnern. –

+3

Dies sollte die Antwort sein !! es ist einfach und standardmäßig von NET getan, so dass es am besten auf Flexibilität und Wartbarkeit –

+0

Es ist schön, aber es hat nicht funktioniert für mich .. Ich bekomme immer noch etwas wie 'main/images/load.png' die Domain fehlt. – fiberOptics