2013-04-18 4 views
16

Есть ли простой (встроенный) способ в asp.net mvc view, чтобы получить абсолютный путь к файлу в папке содержимого?Получить абсолютный путь к файлу по контенту

На данный момент я использую

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

Но путь вернулся не является абсолютным.

Я знаю, что можно построить свой собственный помощник в таких случаях, но я хотел бы знать, есть ли более простой способ ...

+0

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

+0

Возможный дубликат [ASP.NET MVC - Поиск абсолютного пути к папке приложения \ _Data с контроллера] (http://stackoverflow.com/questions/1268738/asp-net-mvc-find-absolute-path-to-the-app-data-folder-from-controller) –

+0

Мне нужно проверить, когда система подключена к сети, когда я использую ее для отправки электронной почты. Позволит вам знать завтра. Спасибо. – mosquito87

ответ

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

Результат этого: C: \ Users \ ... \ Projects \ ... \ Content \ images \ logo.png Что мне действительно нужно: http: // localhost: 57001/Контент/изображения /logo.png (в среде разработки) и http://www.mydomain.com/Content/images/logo.png (в продуктивной среде) – mosquito87

+3

@ mosquito87 От того, как ваш вопрос был написан, это было не совсем очевидно, что вы хотите, поэтому ответ был верным в отношении того, что вы написали (хотя и не по отношению к тому, что вы имели в виду). Поэтому я не верю, что он заслужил все поданные голоса, которые он получил. – jahu

+0

Dang, вы его там нашли: он полагался на контекст людей, которые читали вопрос, зная, что такое веб-разработка. – Josiah

5

Url.Content действительно возвращает абсолютный путь. Вы хотите домен (и порт). Вы можете получить текущий домен, используя:

Request.Url.Authority 

Затем объедините эту строку с абсолютной строкой пути вашего изображения. Он вернет доменное имя, и если вы находитесь на другом порту, он также будет содержать номер порта.

+2

Вам также необходимо добавить схему. Вот так: string.Format ("{0}: // {1} {2}", Request.Url.Scheme, Request.Url.Authority, Url.Content ("~/Content/images/logo.png")) – vfportero

24

Это работает для меня:

Помощник:

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

Использование в cshtml:

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

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

приятный (Y) спасибо большое. – Orhaan

11

Это создаст абсолютный URL к изображению (или файл)

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

Спасибо, я искал хорошее решение в течение последнего часа. и твоя работа великолепна. –

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

это вызывает .ToString() Ури. Вы также можете поместить Uri в переменную и вызвать .AbsoluteUri.

Смежные вопросы