답변:
자세한 내용을 보려면 여기 를 클릭 하십시오 . 그러나 확장 방법이 필요하지 않습니다. 그것은 매우 직관적 인 방식이 아닌 이미 구워졌습니다.
Url.Action("Action", null, null, Request.Url.Scheme);
Request.Url.SchemeHTTPS를 사용 생성 된 URL은 또한 HTTPS를 사용하는 경우 그래서.
Html.ActionLink잘 작동합니다 (예를 들어 프로토콜을 취하는 모든 방법, 예를 들어 MVC 4의 마지막 2 개)
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.은 다음과 같습니다. 다음은 동일한 행동을 얻는 방법에 대한 예입니다.
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;
}
}
}
지원 정보 :
@Charlino의 답변을 가이드로 사용하여 이것을 생각해 냈습니다.
UrlHelper에 대한 ASP.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);
}
}
}
내장 된 방법이 있는지 확실하지 않지만 자체 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"))%> »
찰스
동일한 결과이지만 약간 더 깔끔합니다 (문자열 연결 / 포맷 없음).
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;
}