2016-08-29 5 views
2

나는 주변을 둘러 보았고 내가 겪고있는 문제와 유사한 것을 발견하지 못했습니다. 그래서 나는 그것을 여기 던져 버릴 것이고 어떤 것이 붙는지를 볼 것입니다.WebAPI 요청이 404 오류를 던졌습니다 ... 동일한 요청으로

컨트롤러와 설정 방법이 있습니다.

public class BoothAPIController : ITApiControllerBase 
{ 
    [HttpGet] 
    public HttpResponseMessage GetActiveAssetNumbersLike([FromUri] String id) 
    { 
     HttpResponseMessage ret; 

     // ... do some processing 

     return ret; 
    } 
} 

라우트는

http://localhost:52211/api/BoothAPI/GetActiveAssetNumbersLike/PR 
http://localhost:52211/api/BoothAPI/GetActiveAssetNumbersLike/PRN0 

이 사람은 그러나 ... 404 오류를 반환 ... Global.asax에

protected void Application_Start(object sender, EventArgs e) 
{ 

    GlobalConfiguration.Configuration.Routes.MapHttpRoute(
      name: "CustomApi", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional }); 


    GlobalConfiguration.Configuration.Routes.MapHttpRoute(
      name: "BoothWithDateAPI", 
      routeTemplate: "api/{controller}/{boothID}/{year}/{month}/{day}"); 

    GlobalConfiguration.Configuration.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional }); 

} 

에서 설정 그리고이 두 가지 요청은 완벽하게 실행된다. ..

http://localhost:52211/api/BoothAPI/GetActiveAssetNumbersLike/PRN 

헤더 성공적인 요청

Cache-Control →no-cache 
Content-Length →7731 
Content-Type →application/json; charset=utf-8 
Date →Mon, 29 Aug 2016 13:13:43 GMT 
Expires →-1 
Pragma →no-cache 
Server →Microsoft-IIS/8.0 
X-AspNet-Version →4.0.30319 
X-Powered-By →ASP.NET 
X-SourceFiles → [string] 

(어깨를 으쓱)처럼 보이는 동안 실패한 요청 내가 매개 변수에 하나의 변화가 만드는 이유 완전한 딱하다 ... 몰라 ... 같은

Cache-Control →private 
Content-Length →2879 
Content-Type →text/html; charset=utf-8 
Date →Mon, 29 Aug 2016 12:53:08 GMT 
Server →Microsoft-IIS/8.0 
X-AspNet-Version →4.0.30319 
X-Powered-By →ASP.NET 
X-SourceFiles →= [string] 

보인다 차.

+0

Content-Type에 차이점이 있습니다. 실패하면 text/html을 보냅니다. 이 요청을 어떻게 보내십니까? 신청서를 통해 또는 우체국을 통해 어쩌면? – jpgrassi

+0

또한 Global.asax에서 경로를 설정하는 이유는 무엇입니까? App_Start 폴더에 WebApiConfig 파일이 없습니까? – jpgrassi

+0

요청이 동일하며 우편 배달부에서 보내지는 경우 매개 변수 문자열 만 다릅니다. 최대한 멀리 Global.asax ... 순간 편의. 필자는 구성을 많이 할 필요가 없으므로이를 해결할 필요가 없습니다. 응용 프로그램이 커짐에 따라 조금 더 리팩터링 할 수 있습니다. –

답변

2

나는 이걸 조금 파고 들었고 놀랐다. 당신이 PRN을 보내려고하는 매개 변수 아래 MS-DOS Device Driver

에서 예약어 기본 장치 드라이버 이름의 목록입니다 것을십시오.

PRN 시스템 목록 장치,이 질문은 문제에 대한 답이

일반적으로 병렬 포트 : IIS gives 404 when MS-DOS reserved names are used in parameters values

을하지만 당신은 참으로 RelaxedUrlToFileSystemMapping 설정의 잠재력 함정을 알고 있어야합니다. Scott Hanselman의이 기사보기 : Experiments in Wackiness: Allowing percents, angle-brackets, and other naughty things in the ASP.NET/IIS Request URL

+0

고맙습니다! 이 예약 된 이름이 웹 서비스와 관련된 이유가 무엇인지 상상할 수는 없지만이 문제는 해결되었습니다 ... –

+0

이들은 파일 시스템과 관련이 있습니다. 필자가 제공 한 링크가 그 이유를 자세히 설명합니다. 매일 배울 수있는 한 가지! – jpgrassi

관련 문제