2016-09-16 6 views
0

컨트롤러와 이름/경로가 같은 루트 수준 폴더를 만드는 경우 IIS가 폴더로 연결하려고 시도하고 WebAPI를 참조하지 않는 것 같습니다. 2 라우팅.컨트롤러와 이름이 같은 폴더를 만들면 404 - Web API 2가됩니다.

예 :

ProjectA 
|- Controllers/ 
|-- ExamplesController.cs 
|- Examples/ 

ExamplesController

[RoutePrefix("examples")] 
public class ExamplesController : ApiController 
{ 
    [HttpGet] 
    [Route("")] 
    public async Task<IHttpActionResult> Get() 
    { 
    // code 
    } 
} 

기대가 컨트롤러를 공격하다, 그러나 IIS 시도하고 대신 폴더를 탐색 할 것으로 보인다.

예 : http://localhost:123/examples

시도 솔루션 :

는 내가 다른 모든 핸들러를 제거 할 수 있는지 확인하기 위해 IIS 핸들러 주위를 재생하려고했지만 그

웹을 도움이되지 않았다 .config

답변

1

라우팅 시스템은 URL이 파일과 일치하는지 확인하기 위해 파일 시스템을 검사합니다/폴더를 디스크에 저장하십시오. 일치하는 항목을 찾으면 라우팅은 무시되고 요청은 경로 항목을 무시하므로 파일이 직접 제공됩니다. 정적 파일은 당신이 당신의 RouteConfig true로 RouteExistingFiles 속성을 설정할 수 있습니다이 동작을 변경하려면 라우팅

MVC를 거치지 않고 제공되도록 그러나 이것은이 그렇게 철저하게

그들을 테스트합니까, 정적 파일에 영향을 미칠 수있다
routes.RouteExistingFiles = true; 
+0

퍼펙트, 이것을 시도해보고 설명한대로 작동하면 대답으로 표시합니다. – Oliver

+0

시도해 보셨습니까? 어떤 문제? –

+1

Google API의 정적 콘텐츠를 제공하지 않기 때문에 정상적으로 작동했습니다. 무제한 라우팅과 정적 컨텐츠를 모두 제공해야하는 경우 더 까다로울 수 있습니다. – Oliver