Подтвердить что ты не робот

URL-адрес Url для полного URL-адреса в asp.net mvc-3

Написание

@Url.Content("~/Something/Something.html")

в бритве делает

/AppFolder/Something/Something.html

Есть ли способ показать полный URL-адрес, например http://www.something.com/AppFolder/Something/Something.html без жестоких хаков? (например, сохранение протокола и домена в AppConfig и конкатенация строки к нему)

Есть ли такой помощник, как @Url.FullPath("~/asdf/asdf") или аналогичный?

4b9b3361

Ответ 1

@Url.RouteURL() не отвечает на этот вопрос. Он работает для названных маршрутов, но не соответствует произвольным виртуальным путям. Вот быстрый метод помощника, который генерирует полный исходящий URL-адрес. Вы можете создавать перегрузки для различных схем (http [s]) в зависимости от желаемой степени управления.

public static class UrlHelperExtension
{
    public static string ContentFullPath(this UrlHelper url,string virtualPath)
    {
        var result = string.Empty;
        Uri requestUrl = url.RequestContext.HttpContext.Request.Url;

        result = string.Format("{0}://{1}{2}",
                               requestUrl.Scheme,
                               requestUrl.Authority, 
                               VirtualPathUtility.ToAbsolute(virtualPath));
        return result;
    }
}

Ответ 2

См. это сообщение в блоге для ответа.

В принципе, все, что вам нужно сделать, это параметр протокола, например.

Url.Action("About", "Home", null, "http")

Ответ 3

Для всех, кому нужно создавать URL-адреса в WebAPI 2.2 и/или MVC5, это сработало для меня:

// works in a controller
var requestUri = this.Request.RequestUri;
// just the http/s and the hostname; ymmv
string baseUrl = requestUri.Scheme + "://" + requestUri.Authority + "/";
// build your url for whatever purpose you need it for
string url = baseUrl + "SomeOtherController?id=" + <some_magic_value>;

Ответ 4

Вы можете использовать помощника для создания полного URL, включая протокол. Обратите внимание на первую строчную букву в url.Action. url.Action.

var url = new UrlHelper(System.Web.HttpContext.Current.Request.RequestContext);
var fullUrl = url.Action("YourAction", "YourController", new { id = something }, protocol: System.Web.HttpContext.Current.Request.Url.Scheme);

Выход

https://www.yourdomain.com/YourController/YourAction?id=something