2013-04-18 14 views
16

Czy jest jakiś łatwy (wbudowany) sposób w widoku asp.net mvc, aby uzyskać bezwzględną ścieżkę pliku w folderze zawartości?Uzyskaj bezwzględną ścieżkę pliku na zawartość

W tej chwili używam

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

Ale droga zwrócone nie jest absolutna.

Wiem, że jest możliwe zbudowanie własnego pomocnika w takich przypadkach, ale chciałbym wiedzieć, czy jest jakiś prostszy sposób ...

+0

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

+0

możliwy duplikat [ASP.NET MVC - Znajdź bezwzględną ścieżkę do folderu aplikacji \ _Data od kontrolera] (http://stackoverflow.com/questions/1268738/asp-net-mvc-find-absolute-path-to-the-app-data-folder-from-controller) –

+0

Muszę sprawdzić, kiedy system jest w trybie online, ponieważ używam go do wysyłania e-maili. Powiadomię Cię jutro. Dziękuję. – mosquito87

Odpowiedz

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

Dane wyjściowe tego: C: \ Users \ ... \ Projects \ ... \ Content \ images \ logo.png To, czego naprawdę potrzebuję, to: http: // localhost: 57001/Content/images /logo.png (w środowisku programistycznym) i http://www.mydomain.com/Content/images/logo.png (w środowisku produkcyjnym) – mosquito87

+3

@ mosquito87 Ze sposobu, w jaki napisano twoje pytanie, tak naprawdę nie było oczywiste, czego chcesz, więc odpowiedź była poprawna w stosunku do tego, co napisałeś (choć nie w odniesieniu do tego, co masz na myśli). W związku z tym nie sądzę, by zasłużyła na wszystkie głosy, które otrzymała. – jahu

+0

Dang, masz go tam: polegał na kontekście ludzi czytających pytanie, wiedzących, jaki był rozwój sieci. – Josiah

5

Url.Content nie zwraca ścieżkę bezwzględną. Czego chcesz to domena (i port). Można uzyskać bieżącą domenę za pomocą:

Request.Url.Authority 

Następnie połączyć ten ciąg z bezwzględną ścieżkę ciąg obrazu. Zwróci nazwę domeny, a jeśli jesteś na innym porcie, będzie również zawierać numer portu.

+2

Należy również dodać Schemat. Coś takiego: string.Format ("{0}: // {1} {2}", Request.Url.Scheme, Request.Url.Authority, Url.Content ("~/Content/images/logo.png")) – vfportero

24

Działa to dla mnie:

Pomocnik:

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

Wykorzystanie w cshtml:

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

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

fajny (Y) wielkie dzięki. – Orhaan

11

To wygeneruje bezwzględny adres URL do obrazu (lub plik)

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

Dziękuję, szukałem dobrego rozwiązania przez ostatnią godzinę. a twoja działa świetnie. –

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

to wywołuje funkcję .ToString() z Uri. Możesz również umieścić Uri w zmiennej i wywołać .AbsoluteUri.

Powiązane problemy