Как найти абсолютный url-адрес действия в ASP.NET MVC?
мне нужно сделать что-то вроде этого:
<script type="text/javascript">
token_url = "http://example.com/your_token_url";
</script>
Я использую бета-версию MVC, но я не могу понять, как получить абсолютный url-адрес действия. Я хотел бы сделать что-то вроде этого:
<%= Url.AbsoluteAction("Action","Controller")) %>
есть ли помощник или метод страницы для этого?
9 ответов:
клик здесь для получения дополнительной информации, но по существу нет необходимости в методах расширения. Он уже запечен, просто не очень интуитивно.
Url.Action("Action", null, null, Request.Url.Scheme);
расширить UrlHelper
namespace System.Web.Mvc { public static class HtmlExtensions { public static string AbsoluteAction(this UrlHelper url, string action, string controller) { Uri requestUrl = url.RequestContext.HttpContext.Request.Url; string absoluteAction = string.Format( "{0}://{1}{2}", requestUrl.Scheme, requestUrl.Authority, url.Action(action, controller)); return absoluteAction; } } }тогда назовите это так
<%= Url.AbsoluteAction("Dashboard", "Account")%>EDIT-RESHARPER АННОТАЦИИ
самый популярный комментарий к принятому ответу -
This answer is the better one, this way Resharper can still validate that the Action and Controller exists.Так вот пример, как вы могли бы получить такое же поведение.using JetBrains.Annotations namespace System.Web.Mvc { public static class HtmlExtensions { public static string AbsoluteAction( this UrlHelper url, [AspMvcAction] string action, [AspMvcController] string controller) { Uri requestUrl = url.RequestContext.HttpContext.Request.Url; string absoluteAction = string.Format( "{0}://{1}{2}", requestUrl.Scheme, requestUrl.Authority, url.Action(action, controller)); return absoluteAction; } } }информация о поддержке:
<%= Url.Action("About", "Home", null, Request.Url.Scheme) %> <%= Url.RouteUrl("Default", new { Action = "About" }, Request.Url.Scheme) %>
используя @Charlino ' s ответ в качестве руководства, я придумал это.
The ASP.NET документация MVC для UrlHelper показывает, что URL-адрес.Действие возвращает полный Url-адрес, если имя хоста и протокол передаются. Я создал эти помощники, чтобы принудительно предоставить имя хоста и протокол. Несколько перегрузок зеркало перегрузок по адресу.Действие:
using System.Web.Routing; namespace System.Web.Mvc { public static class HtmlExtensions { public static string AbsoluteAction(this UrlHelper url, string actionName) { Uri requestUrl = url.RequestContext.HttpContext.Request.Url; return url.Action(actionName, null, (RouteValueDictionary)null, requestUrl.Scheme, null); } public static string AbsoluteAction(this UrlHelper url, string actionName, object routeValues) { Uri requestUrl = url.RequestContext.HttpContext.Request.Url; return url.Action(actionName, null, new RouteValueDictionary(routeValues), requestUrl.Scheme, null); } public static string AbsoluteAction(this UrlHelper url, string actionName, RouteValueDictionary routeValues) { Uri requestUrl = url.RequestContext.HttpContext.Request.Url; return url.Action(actionName, null, routeValues, requestUrl.Scheme, null); } public static string AbsoluteAction(this UrlHelper url, string actionName, string controllerName) { Uri requestUrl = url.RequestContext.HttpContext.Request.Url; return url.Action(actionName, controllerName, (RouteValueDictionary)null, requestUrl.Scheme, null); } public static string AbsoluteAction(this UrlHelper url, string actionName, string controllerName, object routeValues) { Uri requestUrl = url.RequestContext.HttpContext.Request.Url; return url.Action(actionName, controllerName, new RouteValueDictionary(routeValues), requestUrl.Scheme, null); } public static string AbsoluteAction(this UrlHelper url, string actionName, string controllerName, RouteValueDictionary routeValues) { Uri requestUrl = url.RequestContext.HttpContext.Request.Url; return url.Action(actionName, controllerName, routeValues, requestUrl.Scheme, null); } public static string AbsoluteAction(this UrlHelper url, string actionName, string controllerName, object routeValues, string protocol) { Uri requestUrl = url.RequestContext.HttpContext.Request.Url; return url.Action(actionName, controllerName, new RouteValueDictionary(routeValues), protocol, null); } } }
Я не уверен, что есть встроенный способ сделать это, но вы можете свернуть свой собственный метод HtmlHelper.
что-то вроде следующего
namespace System.Web.Mvc { public static class HtmlExtensions { public static string AbsoluteAction(this HtmlHelper html, string actionUrl) { Uri requestUrl = html.ViewContext.HttpContext.Request.Url; string absoluteAction = string.Format("{0}://{1}{2}", requestUrl.Scheme, requestUrl.Authority, actionUrl); return absoluteAction; } } }тогда назовите это так
<%= Html.AbsoluteAction(Url.Action("Dashboard", "Account"))%> »HTHs, Чарльз
тот же результат, но немного чище (без конкатенации строк / форматирования):
public static Uri GetBaseUrl(this UrlHelper url) { Uri contextUri = new Uri(url.RequestContext.HttpContext.Request.Url, url.RequestContext.HttpContext.Request.RawUrl); UriBuilder realmUri = new UriBuilder(contextUri) { Path = url.RequestContext.HttpContext.Request.ApplicationPath, Query = null, Fragment = null }; return realmUri.Uri; } public static string ActionAbsolute(this UrlHelper url, string actionName, string controllerName) { return new Uri(GetBaseUrl(url), url.Action(actionName, controllerName)).AbsoluteUri; }
полный ответ с аргументами будут :
var url = Url.Action("ActionName", "ControllerName", new { id = "arg_value" }, Request.Url.Scheme);и это приведет к абсолютному url
может быть, это (?):
<%= Request.Url.GetLeftPart(UriPartial.Authority) + Url.Action("Action1", "Controller2", new {param1="bla", param2="blabla" }) %>
Comments