2016-10-27 6 views
1

Mvc 및 OpenID Connect Auth를 사용하는 ASP.NET Core 앱이 있습니다.컨트롤러 클래스 외부에서 IRouter의 인스턴스를 가져 오는 가장 쉬운 방법

OpenID 이벤트 처리기에서 사용자가 인증 서버에서 승인 화면을 거부하고 사용자를 특정 페이지로 리디렉션하고 라우터를 사용하여 리디렉션 URL을 생성하려는 경우를 처리하려고합니다. 하드 코드 된 URL이 마음에 들지 않습니다.

그래서, out-parameter를 통해 IRouter를 호출하는 메서드에 반환하는 사용자 지정 UseMvc 메서드를 구현해야했습니다. 그런 다음 Startup 메서드의 속성에 저장하고 그 내부의 모든 메서드에서 사용할 수 있습니다.

문제는 내가 원하는 것을 성취 할 수있는 더 간단한 방법이 있어야하는 것처럼 내 솔루션이 나에게 어울리지 않는 것입니다. 누군가가 올바른 방향으로 나를 가리킬 수 있는지 궁금해. 내입니다 언급 한 사용자 지정 방법은 here입니다. 그리고 이것은 there이라 불리며, 해결 된 라우터는 here으로 더 사용될 수 있습니다.

+0

왜 'IRouter'를 얻고 싶습니까? 아니면 ['IUrlHelper'] (http : //stackoverflow.com/questions/30696337/unable-to-utilize-urlhelper/30697703#30697703) 그리고 유틸리티 메소드를 사용하여 URL을 생성 하시겠습니까? –

답변

0

코드가 UseMvc() 추가로있다. 그래서 사용자 정의 미들웨어는 MVC이 경로에 액세스 할 수 없습니다 전에 실행 추가 할 수 있습니다 (라우팅 미들웨어 후 실행과 같이 한 라우터에 액세스 할 수 있습니다.

var routers = httpContext.GetRouteData().Routers; 
var routers httpContext.Features.Get<IRoutingFeature>().RouteData.Routers; 

하지만 당신의 코드가 이미 켜져있는 경우 MVC는 건설는, 당신은 사용하는 것이 더 낫다 :

기본적으로 MVC의 종류 등의 어느 하나의 라우터에 액세스 할 수 있습니다, 컨트롤러, 필터, 태그 도우미처럼 구축 IUrlHelper은 다음과 같은 방법을 사용하여 URL을 생성합니다.

urlHelper.Action("Index", "Home"); 

IUrlHeleper합니다 (Controller 파생 클래스 내부의 Url 특성 등) 여러 장소에서 쉽게 사용할 수 있지만 당신은 또한 this question 같이 DI를 사용하여 얻을 수 있습니다. (DI를 사용하여 DI를 사용하여 해결하는 코드가 라우팅 미들웨어 이후에 실행되고있는 한!

+0

좋은 지적이지만 제 경우에는 효과가 없습니다. 문제는 Mvc 앞에 OpenID Connect 코드 (다른 인증은 물론)를 넣어야한다는 것입니다. 그렇지 않으면 제대로 작동하지 않습니다. – kosmakoff

관련 문제