0

내 webservice에서 공개 할 기능에 대해 간단한 REST API를 수행하려고합니다.ASP.NET 웹 API 2 - 매개 변수가 지원되지 않는 GET

[RoutePrefix("companies")] 
public class CompaniesController : BaseApiController { 

    [HttpGet, Route("{companyId:int}")] 
    public CustomResponse Get(int companyId) { } 

    [HttpPost] 
    public CustomResponse Post(CompanySaveViewModel model) { } 

    [HttpDelete, Route("{companyId:int}"] 
    public CustomResponse Delete(int companyId) { } 
} 

이 기능이 작동합니다. POST 메서드가 제대로 작동합니다.

나는 주어진 URL을 사용하여 이러한 메서드 호출하려고 해요 :

http://localhost:11111/api/companies/1 [GET]

http://localhost:11111/api/companies/1을 내가 GET 및/또는 방법을 DELETE 호출 할 때, 나는 아래의 메시지를 받았습니다

enter image description here

POST 잘 작동 [삭제]. 매개 변수없이 GET 을 호출하려고하면 잘 작동합니다. 문제는 GET/DELETE 메서드에 대한 매개 변수가있을 때 나타납니다. 여기에 무슨 문제가있을 수 있습니까?

도움을 주셔서 감사합니다.

+0

'RoutePrefix'를 제거하고 같은 것을 시도하십시오 –

답변

2

하여 POST 액션에 경로를 추가하는 시도 :

[HttpPost, Route("")] 
public CustomResponse Post(CompanySaveViewModel model) { } 

이것은 라우팅 정의의 일관성을 보장한다 : 하나는 속성에 기반한 라우팅을 사용하거나 개인적으로 명시 적 속성을 선호 (글로벌 규칙 기반 라우팅을 사용 기반 라우팅). 나는 또한이 경로의 종류와 혼합되지 않도록하여 설정에서 협약을 기반으로 경로를 제거 할 추천 :

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

하는 속성에 기반한 라우팅을 가능하게하는 것을 잊지 마세요 때 부트 스트랩 :

config.MapHttpAttributeRoutes(); 

다음은 통과를 권장하는 속성 기반 라우팅의 nice overview입니다.

+0

고마워, @ 다린! 기본 HTTP 라우팅을 제거함으로써 매력처럼 작동하기 시작했습니다. 응용 프로그램이 라우팅 규칙을 잘못 구현 한 것으로 생각하고 Route 규칙 또는 기본 정의 규칙을 사용해야하는지 여부를 알지 못했습니다. 감사! – Kiwanax