2016-08-11 1 views
0

내 관리 영역에 존재하는 웹 API 경로를 테스트하려고합니다. 영역 webapi 경로가 해결되지 않습니다.

은 해당 지역에서 경로 정의가

[HttpPut] 
    [Route("timezone/put/{timezone}", Name = "PutTimeZone")] 
    [AllowAnonymous] 
    [ResponseType(typeof(void))] 
    public IHttpActionResult PutTimeZone(string timezone) 
    { 
    /*Action body*/ 
    } 

내가 너무 [RoutePrefix ("관리자/기타"를) 여기서

내 경로 테스트

처럼 경로 접두사가있다
const string route = "/admins/misc/timezone/put/-120"; 
     RouteAssert.HasApiRoute(_httpConfiguration, route, HttpMethod.Put); 

     _httpConfiguration.ShouldMap(HttpMethod.Put, route) 
      .To<MiscApiController>(HttpMethod.Put, x => x.PutTimeZone("-120")); 

내가 테스트를 실행하면, 내가 얻을 MvcRouteTester.Assertions.AssertionException : Expected 'Administration', got no value for 'area' at url '/admins/misc/timezone/put/-120'.

난 당신이 MVC 영역을 사용하는 경우, 다음과 같은 당신이 네임 스페이스의 표준 레이아웃을 사용할 때, 지역 이름이 당신의 컨트롤러 유형 이름에서 추출 및 지역에 대해 테스트됩니다 route tester wiki page

읽어 경로에 의해 선택. 예 : 컨트롤러의 정규화 된 유형 이름이 MyWebApp.Areas.Blog.CommentController 인 경우 예상 지역 이름은 이 "블로그"가됩니다.

하지만 솔직하게 말해서, 내 테스트를 통과하기 위해 무엇을해야하는지에 대한 단서를 제공하지 않습니다. 내 질문은 무엇을 놓치고 있습니까?

답변

1

[RoutePrefix("admins/misc")][RouteArea("Administration",AreaPrefix = "admins/misc")]으로 바꾸거나 둘 모두를 [RouteArea("Administration",AreaPrefix = "admins"),RoutePrefix("misc")]으로 결합 해보십시오.

편집 : 은 내가 MvcRouteTester 라이브러리의 소스를 다운로드하고 제공과 거의 같은 예제를 사용하여 디버깅을 시도하고 라이브러리 자체에 문제가있는 것 같습니다.

구체적인 하나 방법 Common.Verifier.VerifyExpectations 기대 영역 expected.Area 일치 경로의 실제 면적 actual.Area가 있지만 (이 ApiRoute.Generator.ReadRequestProperties의 컨트롤러 및 작업 속성을 설정 않지만) 값으로 실제 면적 속성을 설정 더 이전의 코드가 있다는 것을 주장한다.

그래서 현재 상태 (이 포스트 당시)에서는 라이브러리가 WebApi의 영역을 지원하지 않는다고 가정합니다. 이 게시물에 대한 링크가있는 MvcRouteTester github 페이지에서 문제를 열 ​​것을 제안합니다.

+0

하지만 라우트 영역은 Asp.net Mvc 용으로 특별히 의미가 있으며 Webapi 변형이 아닌 것 같습니다. webapi 컨트롤러 – Cizaphil

+0

에서 시험해 보았으므로 테스트는 여전히 동일한 예외 메시지와 함께 실패합니다 위. – Cizaphil

+0

나는 그것을 깨닫지 못했고 그 대답이 무엇인지 잘 모릅니다. 미안합니다. 지금까지이 영역 안의 ApiController를 사용해 본 적이 없습니다. 마음에 떠오르는 다른 점은 ApiController의 네임 스페이스가 무엇인가? 당신이 올바르게 제공 한 위키 문서를 이해한다면 예상 네임 스페이스는'YourProjectName.Areas.Administration'입니다. 그것을 확인할 수 있습니까? – davke