2017-03-06 2 views
0

라우팅/구조적 정리가 필요한 웹 API 4.6이 있습니다. 의는 다음과 같은 경로 구성을 생각해 보자 :라우팅 매개 변수를 컨트롤러 생성자에 전달하는 방법

public static void Register(HttpConfiguration config) 
{ 
    config.Routes.MapHttpRoute(
      name: "BaseRoute", 
      routeTemplate: "api/{source}/{sourceDocumentName}/{entity}/{projectNumber}/{action}/{outputType}" 
     ); 
} 

내가 선택한 컨트롤러를 적용하고 생성자에 전달 될 {sourceDocumentName}을하고 싶습니다. 따라서 {sourceDocumentName} == "Purchase" || "Order"이라면 RequisitionController(sourceDocumentName)으로 해석되고 매개 변수를 생성자로 전달합니다.

+0

실제 필요 사항은 무엇입니까? 라우트 값을 컨트롤러 생성자에 전달하는 데 어떻게 도움이됩니까? –

+0

"out of the box"asp.net을 사용하면 동일한 코드로 여러 컨트롤러를 만들어야한다는 것을 의미합니다. 'PurchaseController'는'OrderController'와 같습니다. – Thor

답변

1

두 가지 :

  1. 왜 실제로 생성자에 전달해야합니까? 경로 값으로는 언제든지 RouteData.Values을 통해 언제든지 액세스 할 수 있습니다.

  2. 논리가 많이 공유되어있는 경우에도 여러 컨트롤러를 계속 사용할 수 있으며 기본 컨트롤러에서 상속 받도록 할 수 있습니다.

+0

1. 매개 변수로 해당 경로 값을 사용하는 방법을 해결하지만 특정 컨트롤러에 매핑하는 방법은 사용하지 않습니다. – Thor

+0

2. 지금 실제로하고 있습니다. 기본 클래스 이름 대신 파생 된 클래스 이름을 확인하기 위해 고유 한 한 줄 사용자 지정 라우팅 공급자를 만들어야합니다. 제가 만족스럽지 않은 이유는 행동 방법에 대한 경로를 덮어 쓰는 데 문제가 있었기 때문입니다. – Thor

+1

속성 라우팅을 고려해 보셨습니까? 아마도 당신의 삶이 더 쉬워 질 것입니다. –

2

실제로 이해해야 할 것은 Mvc 요청 파이프 라인입니다. 요청이 들어 오면 경로 표 (MvcRouteHandler)는 ControllerFactory을 사용하여 경로 데이터를 기반으로 매핑해야하는 컨트롤러를 기본적으로 초기화하는 MvcHttpHandler의 인스턴스를 실행하고 가져옵니다.

본질적으로 당신이보고있는 것은 자신의 IControllerFactory 사용자 지정 구현을 가지고이 요청 파이프 라인을 이용할 수있게하는 것입니다.

+0

어떤 이유로 인해 커스텀 IControllerFactory가 첫 번째 요청 후에 호출되지 않아 작동하지 못했습니다. 밖에 나가는 방법에 대한 예제는 많지 않지만 [여기] (http://www.jomendez.com/2016/01/20/how-to-create-custom-controller-factory-asp-net/)는 하나입니다. – Thor

관련 문제