답변:
자세한 내용을 보려면 여기 를 클릭 하십시오 . 그러나 확장 방법이 필요하지 않습니다. 그것은 매우 직관적 인 방식이 아닌 이미 구워졌습니다.
Url.Action("Action", null, null, Request.Url.Scheme);
Request.Url.Scheme
HTTPS를 사용 생성 된 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;
}