MVC 5에서는 에 HttpContext.Current
을 사용하여 액세스 할 수 있습니다. HttpContext
이상에 액세스하는 기본 방법은 현재 RouteContext
입니까?현재 RouteContext에 액세스
3
A
답변
4
먼저 RouteContext
은 액세스하려는 개체가 아닙니다. 라우트가 Andled되었으므로 신호를 보내는 데 고유하게 사용되므로 MVC 내에서 흐르지 않습니다. 대신 RouteData
에 액세스하려고합니다. this.ActionContext.RouteData
또는 HttpContext.Current 해당 this.ActionContext.HttpContext
또는 ActionFilter
에서 직접 this.HttpContext
당신이 통과를 통해 액세스 할 수 있습니다위한 - 당신이 액세스 할 수있는 컨트롤러
: 액세스 할 수있는 몇 가지 방법으로 여기
문맥 : 당신이 DI 시스템에 액세스 할 수
public void OnActionExecuting(ActionExecutingContext context)
{
var routeData = context.RouteData;
var httpContext = context.HttpContext;
...
}
다른 곳
는 (서비스의 생성자를 말하거나 SERV에 직접 액세스 할 때 얼음 공급자) 당신은 현재 요청의 ActionContext
에서 얻을 수 있지만 요청의 범위 내에있을 때만 작동하며 전달 된 서비스 제공자는 요청 범위에 해당됩니다.
public MyService(IScopedInstance<ActionContext> contextAccessor)
{
_httpContext = contextAccessor.Value.HttpContext;
_routeData = contextAccessor.Value.RouteData;
}
UPDATE 참고 : Beta3에와 IContextAccessor<T>
에이 IScopedInstance<T>
참고로 대체 : 당신이이 돈으로 단순한 클래스 원한다면 당신은 또한 당신의 자신의 "접근 자"를 쓸 수 있습니다/Scoped 서비스로 등록 된 속성을 설정합니다.
알겠습니다. 내 경우에는'MyService'의 인스턴스는'Startup.cs'에서 다음과 같이 생성됩니다 :'app.UseMvc (routes => {routes.Routes.Add (new DefaultRouter (routes.DefaultHandler, new DefaultRouteResolver (New DocumentRequest , // 여기에 IContextAccessor를 넣을 필요가있다 //)))); 이 시점에서'Func>'를 사용하여 각 요청에 대해 현재'IContextAccessor'를 보낼 수 있는가? ? –
Marcus
새로운 무언가가 생겼을 때 DI 선택을 취소합니다. 대신 할 수있는 일은 context.RequestServices를 통해 경로로 전달 된 HttpContext에서 현재 서비스 공급자를 얻는 것입니다.하지만 액션 컨텍스트를 사용할 수 없다는 점에 유의하십시오. 아직 라우팅 중에는 작업 선택이 실행되고 작업을 선택 한 후에 만 결정됩니다 (라우팅 후 발생). –
실제로 어떤 작업을하는지 이해하는 것은 흥미로울 수 있습니다 g 달성하기 위해, 거기에 전체적으로 다른 질문이있을 수 있습니다. –