2013-04-18 18 views
16

Esiste un modo semplice (integrato) in una vista aspvc di mvc per ottenere il percorso assoluto di un file nella cartella del contenuto?Ottieni il percorso assoluto del file sul contenuto

Al momento sto usando

@Url.Content("~/Content/images/logo.png") 

Ma il percorso restituito non è assoluta.

So che è possibile costruire il proprio aiuto per casi del genere, ma mi piacerebbe sapere se c'è un modo più semplice ...

+0

http://stackoverflow.com/a/1268755/802791 –

+0

possibile duplicato di [ASP.NET MVC - Trova percorso assoluto dalla cartella App \ _Data dal controller] (http://stackoverflow.com/questions/1268738/asp-net-mvc-find-absolute-path-to-the-app-data-folder-from-controller) –

+0

Devo controllare quando il sistema è online mentre lo uso per l'invio di e-mail. Ti farò sapere domani. Grazie. – mosquito87

risposta

1
HttpContext.Current.Server.MapPath("~/Content/images/logo.png"); 
+0

L'output di questo è: C: \ Users \ ... \ Projects \ ... \ Content \ images \ logo.png Quello che mi serve veramente è: http: // localhost: 57001/Content/images /logo.png (nell'ambiente di sviluppo) e http://www.mydomain.com/Content/images/logo.png (in ambiente produttivo) – mosquito87

+3

@ mosquito87 Dal modo in cui è stata scritta la tua domanda, non era proprio ovvio cosa vuoi, quindi la risposta è stata corretta in relazione a ciò che hai scritto (anche se non in relazione a ciò che avevi in ​​mente). In quanto tale, non credo che meritasse tutti i voti negativi che ha ottenuto. – jahu

+0

Dang, l'hai portato lì: faceva affidamento sul contesto delle persone che leggevano la domanda sapendo quale sviluppo del web era. – Josiah

5

Url.Content non restituisce il percorso assoluto. Quello che vuoi è il dominio (e la porta). È possibile ottenere il dominio corrente utilizzando:

Request.Url.Authority 

poi si combinano questa stringa con la stringa di percorso assoluto dell'immagine. Restituirà il nome di dominio e se si è su una porta diversa includerà anche il numero di porta.

+2

È inoltre necessario aggiungere lo schema. Qualcosa come questo: string.Format ("{0}: // {1} {2}", Request.Url.Scheme, Request.Url.Authority, Url.Content ("~/Content/images/logo.png")) – vfportero

24

questo funziona per me:

Un aiuto:

using System; 
using System.Web; 
using System.Web.Mvc; 

public static class UrlExtensions 
{ 
    public static string Content(this UrlHelper urlHelper, string contentPath, bool toAbsolute = false) 
    { 
     var path = urlHelper.Content(contentPath); 
     var url = new Uri(HttpContext.Current.Request.Url, path); 

     return toAbsolute ? url.AbsoluteUri : path; 
    } 
} 

Utilizzo in cshtml:

@Url.Content("~/Scripts/flot/jquery.flot.menuBar.js", true) 

// example output: 
// http://example.com/directory/Scripts/flot/jquery.flot.menuBar.js 
+0

nice one (Y) grazie mille. – Orhaan

11

Questo genererà un URL assoluto a un'immagine (o file)

Request.Url.Scheme + "://" + Request.Url.Authority + Url.Content("~/Content/images/logo.png") 
+0

Grazie, sono stato alla ricerca di una buona soluzione per l'ultima ora. e il tuo funziona alla grande. –

1
new Uri(Request.Url, Url.Content("~/Content/images/logo.png")) 

questo chiama il .ToString() di Uri. Puoi anche inserire Uri in una variabile e chiamare .AbsoluteUri.

Problemi correlati