RC2 및 1.0 이후 에는 더 이상 IHttpContextAccessor확장 클래스 를 삽입 할 필요가 없습니다 . 를 IUrlHelper통해 즉시 사용할 수 있습니다 urlhelper.ActionContext.HttpContext.Request. 그런 다음 동일한 아이디어에 따라 확장 클래스를 만들지 만 주입이 필요하지 않으므로 더 간단합니다.
public static string AbsoluteAction(
this IUrlHelper url,
string actionName,
string controllerName,
object routeValues = null)
{
string scheme = url.ActionContext.HttpContext.Request.Scheme;
return url.Action(actionName, controllerName, routeValues, scheme);
}
누군가에게 유용 할 경우를 대비하여 액세서를 주입하는 방법에 대한 세부 정보를 남겨 둡니다. 현재 요청의 절대 URL에 관심이있을 수도 있습니다.이 경우 답변의 끝을 살펴보세요.
IHttpContextAccessor인터페이스를 사용하여 확장 클래스를 수정하여 HttpContext. 당신이 컨텍스트가되면, 당신은 얻을 수 HttpRequest에서 인스턴스를 HttpContext.Request하고 해당 속성 사용 Scheme, Host, Protocol같이 등 :
string scheme = HttpContextAccessor.HttpContext.Request.Scheme;
예를 들어 클래스를 HttpContextAccessor로 구성해야 할 수 있습니다.
public static class UrlHelperExtensions
{
private static IHttpContextAccessor HttpContextAccessor;
public static void Configure(IHttpContextAccessor httpContextAccessor)
{
HttpContextAccessor = httpContextAccessor;
}
public static string AbsoluteAction(
this IUrlHelper url,
string actionName,
string controllerName,
object routeValues = null)
{
string scheme = HttpContextAccessor.HttpContext.Request.Scheme;
return url.Action(actionName, controllerName, routeValues, scheme);
}
....
}
Startup클래스 (Startup.cs 파일) 에서 수행 할 수있는 작업은 다음과 같습니다.
public void Configure(IApplicationBuilder app)
{
...
var httpContextAccessor = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();
UrlHelperExtensions.Configure(httpContextAccessor);
...
}
IHttpContextAccessor확장 클래스에서 를 가져 오는 다른 방법을 생각 해낼 수 있지만, 결국 메서드를 확장 메서드로 유지하려면 IHttpContextAccessor정적 클래스에 를 삽입해야합니다 . (그렇지 않으면 IHttpContext각 호출에서 인수로이 필요합니다 )
현재 요청의 absoluteUri 가져 오기
그냥 현재 요청의 절대 URI를 얻고 싶은 경우에, 당신은 확장 방법을 사용할 수 있습니다 GetDisplayUrl또는 GetEncodedUrl로부터 UriHelper클래스입니다. (Ur L Helper 와 다른 점 )
GetDisplayUrl . 표시 전용으로 적합한 완전히 이스케이프되지 않은 형식 (QueryString 제외)으로 요청 URL의 결합 된 구성 요소를 반환합니다. 이 형식은 HTTP 헤더 또는 기타 HTTP 작업에 사용해서는 안됩니다.
GetEncodedUrl . HTTP 헤더 및 기타 HTTP 작업에 사용하기에 적합한 완전히 이스케이프 된 형식으로 요청 URL의 결합 된 구성 요소를 반환합니다.
그것들을 사용하려면 :
- 네임 스페이스를 포함합니다
Microsoft.AspNet.Http.Extensions.
HttpContext인스턴스를 가져 옵니다 . 이미 일부 클래스 (예 : 면도기 뷰)에서 사용할 수 있지만 다른 클래스에서는 IHttpContextAccessor위에서 설명한대로 를 주입해야 할 수 있습니다 .
- 그런 다음 그대로 사용하십시오.
this.Context.Request.GetDisplayUrl()
이러한 메서드에 대한 대안은 HttpContext.Request개체 의 값을 사용하여 절대 URI를 수동으로 만드는 것입니다 ( RequireHttpsAttribute 가 수행 하는 작업과 유사 ).
var absoluteUri = string.Concat(
request.Scheme,
"://",
request.Host.ToUriComponent(),
request.PathBase.ToUriComponent(),
request.Path.ToUriComponent(),
request.QueryString.ToUriComponent());