2010-01-15 33 views
28

'daki herhangi bir dosyanın tam URL'sini alma MVC'deki herhangi bir dosyanın tam URL'si (etki alanı adı vb.) Ile oluşturmak istiyorum. Örnek: Bir .jpg dosya veya bir exe dosya.ASP.Net MVC

Örnek: verirsek "~/images/abc.jpg" o "http://www.mywebsite.com/images/abc.jpg"

Ben bir parametre olarak protokol alır Url.Action aşırı farkındayım dönmelidir. Ancak Url.Action sadece Eylemler için kullanılabilir.

Protokolü parametre olarak alan Url.Content işlevi gibi bir şey istiyorum.

Herhangi bir dosyanın eksiksiz URL'sini almak için herhangi bir yöntem var mı?

Denedim: VirtualPathUtility.ToAbsolute, ResolveClientUrl, ResolveUrl ama bunların hepsi işe yaramıyor.

cevap

46

Aşağıdaki kodu "~ /" ifadesini abdoul URL'ye değiştirmek için kullanabilirsiniz.

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

Düzenleme:

Önce bir yöntem tanımlamak gerekir.

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

Şimdi, bu yöntem tam mutlak URL'yi döndürecektir.

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

çıktı bu http://www.yourdomainname.com/images/image1.gif

+2

Yukarıdaki kod döner "/". Bu kadar. Http: // www.mywebsite/ –

+0

gibi protokol içeren alan adı değil, cevabı güncelledim. şimdi – Adeel

+0

gereksinimi yerine getirecek Evet, Teşekkürler. Referans: http://www.west-wind.com/Weblog/posts/154812.aspx –

-6

deneyin kullanımı olacaktır.

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

OP, bu kesin çözümle ilgili sorunlardan bahsetti. Bu sorunun doğru cevabı 2 yıl önce sorulan sorudan 2 saat sonra verildi ... – OGHaza

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

En etkili yolun hangisi olduğundan emin değilim, ama bunu kullanmanın ve hatırlamanın en kolay yöntem olduğunu düşünüyorum. –

+3

Bu cevap olmalı! NET tarafından basit ve basit bir şekilde yapılır, bu yüzden en iyi esneklik ve dayanıklılık –

+0

Bu güzel ama benim için işe yaramadı .. Ben hala bir şey gibi ana/images/load.png 'alan adı eksik gibi olsun. – fiberOptics