2014-04-24 7 views
2

나는 당신이, 규칙 기반 라우팅을 사용하여 핸들러를 할당 할 수 있습니다 알고 예컨대 :특정 속성 경로에 MessageHandler를 적용 할 수 있습니까?

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     var tokenHandler = new TokenValidationHandler() 
     { 
      InnerHandler = new TokenValidationHandler() 
      { 
       InnerHandler = new HttpControllerDispatcher(config) 
      } 
     }; 

     config.Routes.MapHttpRoute(
      name: "someApi", 
      routeTemplate: "v1/{controller}/{id}", 
      defaults: new object { id = RouteParameter.Optional }, 
      constraints: null, 
      handler: tokenHandler 
      ); 
    } 
} 

이 속성 대신 라우팅이 작업을 수행 할 수 있습니까? 내가하려고하는 것은 무기 토큰으로 일부 경로를 제한하지만 익명 액세스를 허용하는 다른 경로를 허용하는 것입니다. 대신 필터링을 사용해야합니까?

답변

0

나는 이것에 대해서도 관심이있다. 특정 요청 유형이나 특정 컨트롤러에 대한 라우트 (stonetip과 유사)에는 적용되지 않는 전역 메시지 처리기가 필요하다. 내가가는 결국

public class MyHandler : DelegatingHandler 
{ 
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     if (request.Method != HttpMethod.Get) 
     { 
      System.Web.Http.Routing.IHttpRouteData routeInfo = request.GetRequestContext().RouteData; 
      object objController = routeInfo.Values["controller"]; 
      if (objController == null || objController.ToString() != "excluded") 
      { 
       //handler code for all non-excluded routes 
+0

: 요청이 해당 유형의 또는 컨트롤러의 경우

현재 난 그냥 그러나 나는 이것이 가장 효율적인 방법이라고 생각하지 않는다, 내 핸들러에서 모든 논리를 무시 해요 JWT 토큰을 사용하여 특정 경로를 인증하는 것이 필요하기 때문에 다른 접근 방식을 사용하십시오. Owin을 사용하여 깔끔한 솔루션을 발견했습니다. 나는이 질문에 대한 대답이 아닌데도 가능한 한 빨리 내 블로그에 게시하고 여기에서 링크 할 것입니다 ... 여전히 누군가에게 유용 할 수 있습니다. – Stonetip

+0

나는 그 해결책을보고 싶다 :) – Richie