1

나는 그 이유를 들어 HttpConfiguration어떻게이</p> <pre class="lang-none prettyprint-override"><code>http://<host>/api/products (works) http://<host>/api/products/1 (doesn't work) </code></pre> <p>처럼 내 컨트롤러에 액세스 할 수 없습니다 주석

config.Routes.MapHttpRoute("Default", "api/{controller}"); 
config.Routes.MapHttpRoute("Another", "api/{controller}/{action}"); 
config.Routes.MapHttpRoute("WithKey", "api/{controller}/{action}/{key}"); 

이 구성이와 같은 방법에 웹 API 경로를 재정의 그래서 추가 주석 get 메소드에서 전달하지만 작동하지 않는다.

[RoutePrefix("products")] 
public class ProductsController : ApiController 
{ 

    [HttpGet] 
    public IQueryable<IProduct> GetProducts() 
    { 
     return db.GetProducts(); 
    } 

    //[Route("products/{productID}")] Tried. Doesn't work 
    //[Route("{productID:int}")] Tried. Doesn't work 
    [HttpGet] 
    public IProduct GetProduct(int productID) 
    { 
     return db.GetProduct(productID); 
    } 
} 

유일한 방법은 작동시킨다. 이 http://<host>/api/products?productID=1과 같은 주소를 입력하고 있지만이 URL http://<host>/api/products/1에 액세스하고 싶습니다.

http 구성에 새 경로를 추가 할 수 있지만 기존 경로는 수정할 수 없습니다. 그리고 나는 기존 컨트롤러에 영향을 미치고 싶지 않습니다.

어떻게 해결할 수 있습니까?

답변

0

먼저 규칙 기반 경로 이전에 속성 라우팅이 활성화되어 있는지 확인하십시오.

config.MapHttpAttributeRoutes(); 
//...convention-based routes. 
config.Routes.MapHttpRoute("Default", "api/{controller}"); 
//...other code removed for brevity 

다음으로 속성 경로를 업데이트하려고합니다.

[RoutePrefix("api/products")] 
public class ProductsController : ApiController { 
    //GET api/products 
    [HttpGet] 
    [Route("")] 
    public IQueryable<IProduct> GetProducts() { 
     return db.GetProducts(); 
    }  

    //GET api/products/1 
    [HttpGet] 
    [Route("{productID:int}")] 
    public IProduct GetProduct(int productID) { 
     return db.GetProduct(productID); 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 나는 MapHttpAttributRoutes()를 적용했다. 그런 다음 주석을 추가했습니다. GetProducts 만 요청할 수는 있지만 여전히 API/제품/1을 가져올 수는 없습니다. "{"메시지 ":"요청 URI 'http : // /api/products/1'.","MessageDetail":"와 일치하는 HTTP 리소스를 찾을 수 없습니다. "컨트롤러에서 조치가 발견되지 않았습니다. 제품 '을 선택하십시오. "}" –

+0

@ MaximusDecimus, 답변에 제안 된 것과 같은 국제 대회 기반 경로를 추가하기 전에 추가 했습니까? – Nkosi

+0

예 대답과 동일 –