나는 그 이유를 들어 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 구성에 새 경로를 추가 할 수 있지만 기존 경로는 수정할 수 없습니다. 그리고 나는 기존 컨트롤러에 영향을 미치고 싶지 않습니다.
어떻게 해결할 수 있습니까?
답장을 보내 주셔서 감사합니다. 나는 MapHttpAttributRoutes()를 적용했다. 그런 다음 주석을 추가했습니다. GetProducts 만 요청할 수는 있지만 여전히 API/제품/1을 가져올 수는 없습니다. "{"메시지 ":"요청 URI 'http : // /api/products/1'.","MessageDetail":"와 일치하는 HTTP 리소스를 찾을 수 없습니다. "컨트롤러에서 조치가 발견되지 않았습니다. 제품 '을 선택하십시오. "}" –
@ MaximusDecimus, 답변에 제안 된 것과 같은 국제 대회 기반 경로를 추가하기 전에 추가 했습니까? – Nkosi
예 대답과 동일 –