Получить абсолютный путь к содержимому файла

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

В настоящий момент я использую

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

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

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

Ответы

Ответ 1

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

Помощник:

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

Ответ 2

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

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

Ответ 3

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

Request.Url.Authority

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

Ответ 4

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

Ответ 5

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

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