2010-01-15 4 views
28

Je veux générer l'URL complète (avec le nom de domaine etc.) de n'importe quel fichier dans MVC. Exemple: Un fichier .jpg ou un fichier exe.Obtenir l'URL complète de n'importe quel fichier dans ASP.Net MVC

Exemple: Si je donne « ~/images/abc.jpg » elle devrait retourner « http://www.mywebsite.com/images/abc.jpg »

Je suis conscient de la surcharge Url.Action qui prend le protocole en tant que paramètre. Mais Url.Action peut être utilisé uniquement pour les actions.

Je veux quelque chose comme Url.Content fonction qui prend le protocole en tant que paramètre.

Savez-vous si une méthode pour obtenir l'adresse URL complète d'un fichier? J'ai essayé: VirtualPathUtility.ToAbsolute, ResolveClientUrl, ResolveUrl mais tous ne semblent pas fonctionner.

Répondre

46

Vous pouvez utiliser le code suivant pour remplacer "~ /" par l'URL absoulute.

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

Edit:

Vous devez d'abord définir une méthode.

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

Maintenant, appelez cette méthode retournera l'URL absolu complet.

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

La sortie sera http://www.yourdomainname.com/images/image1.gif

+2

Les retours de code ci-dessus "/". C'est tout. Pas le nom de domaine avec le protocole comme http: // www.mywebsite/ –

+0

J'ai mis à jour la réponse. maintenant il remplira le requirment – Adeel

+0

Oui, merci. Référence: http://www.west-wind.com/Weblog/posts/154812.aspx –

-6

Essayez utiliser.

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

OP a parlé de problèmes associés à cette solution exacte. La bonne réponse à cette question a été donnée 2 heures après que la question ait été posée il y a 3 ans ... – OGHaza

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

Je ne sais pas quel est le moyen le plus efficace, mais je trouve que c'est la méthode la plus simple à utiliser et à retenir. –

+3

cela devrait être la réponse !! c'est simple et fait par défaut par NET donc c'est le meilleur sur la flexibiité et la maintenabilité –

+0

C'est beau mais ça n'a pas fonctionné pour moi .. Je reçois toujours quelque chose comme 'main/images/load.png' le domaine est manquant. – fiberOptics

Questions connexes