我需要这样做:
<script type="text/javascript"> token_url = "http://example.com/your_token_url"; </script>
我正在使用MVC的Beta版本,但我不知道如何获得一个动作的绝对url。我想这样做:
<%= Url.AbsoluteAction("Action","Controller")) %>
是否有用于此的helper或Page方法?
我不确定是否有一个内置的方法来做到这一点,但你可以滚动你自己的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"))%> »
扩展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")%>
编辑-重新锐化注释
对于已接受的答案,被点赞最多的评论是This answer is the better one, this way Resharper can still validate that the Action and Controller exists.,所以这里有一个例子,你可以得到相同的行为。
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; } } }
支持信息:
相同的结果,但稍微干净一点(没有字符串连接/格式化):
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; }
ASP。UrlHelper的NET MVC文档显示了这个Url。如果传入主机名和协议,Action将返回一个完全限定的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); } } }
也许这个(?):
<%= Request.Url.GetLeftPart(UriPartial.Authority) + Url.Action("Action1", "Controller2", new {param1="bla", param2="blabla" }) %>
单击在这里以获取更多信息,但基本上不需要扩展方法。它已经存在了,只是不是以非常直观的方式。
Url.Action("Action", null, null, Request.Url.Scheme);
<%= Url.Action("About", "Home", null, Request.Url.Scheme) %> <%= Url.RouteUrl("Default", new { Action = "About" }, Request.Url.Scheme) %>
Env: dotnet核心版本1.0.4
Url.Action("Join",null, null,Context.Request.IsHttps?"https":"http");
带参数的完整答案是:
var url = Url.Action("ActionName", "ControllerName", new { id = "arg_value" }, Request.Url.Scheme);
那会产生一个绝对url