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")
или аналогичный?
Ответы
Ответ 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