2012-12-13 8 views
2

내 설정에서 다음과 같은 설정이 : 나는 API/인증 메시지 처리기가 여전히 실행하고 인증 토큰 헤더 검사에 URL에 아무것도 게시 할 경우WebAPI에 정의되지 않은 경우에도 내 메시지 처리기가 실행되는 이유는 무엇입니까?

routes.MapHttpRoute("NoAuthRequiredApi", "api/auth/", new { id = RouteParameter.Optional }); 
routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new { id = RouteParameter.Optional }, null, new WebApiAuthenticationHandler()); 

합니다. 이런 일이 발생하는 이유가 있습니까? WebApi 라우트의 구성을 변경해야합니까? 그 시점에서 다른 컨트롤러에서 사용하기 위해 토큰을 검색하려고하기 때문에 승인 컨트롤러에 요청할 때 헤더에 인증 토큰이 필요하지 않습니다.

답변

2

어떤 컨트롤러가 필요하다는 표시가 없으므로 맨 위 경로가 일치하지 않습니다. 컨트롤러 이름을 기본값으로 추가하십시오. (필요하지 않은 경우 선택적 ID를 제거하십시오). 그래서

:

routes.MapHttpRoute(
     name: "NoAuthRequiredApi", 
     routeTemplate: "api/auth/", 
     defaults: new { Controller = "Auth" } 
    ); 
+0

여전히이 오류가 : POST에 http : // localhost를 : 49597/API/인증/1 당신의 변화 401 (무단). – jaffa

+0

@jaffa, id "/ 1"을 포함 시키면 경로 템플리트/api/{id}에 추가해야합니다. 그렇지 않으면 계속해서 일치하지 않습니다. 나는 왜 당신이 경로에있는 ID를 원하는지 모르겠다. –

+0

안녕하세요. 작동하도록했습니다. 내가 401을 얻었 기 때문에 그것이 작동하지 않는다고 생각했지만, 인증 컨트롤러에서 명시 적으로 발생 시켜서 더 나아갔습니다. – jaffa

관련 문제