1
我有這個配置在HttpConfiguration如何覆蓋與註解
config.Routes.MapHttpRoute("Default", "api/{controller}");
config.Routes.MapHttpRoute("Another", "api/{controller}/{action}");
config.Routes.MapHttpRoute("WithKey", "api/{controller}/{action}/{key}");
由於這個原因,同樣的方法網頁API路線我無法訪問我的控制器這樣
http://<host>/api/products (works)
http://<host>/api/products/1 (doesn't work)
所以我增加了註釋路由在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
,但我真的想要訪問此網址http://<host>/api/products/1
。
我可以在http配置中添加新路由,但不能修改現有的路由。我不想影響現有的控制器。
我該如何解決這個問題?
感謝您的回答。我應用了MapHttpAttributRoutes()。然後我添加了註釋。我只能請求GetProducts,但我仍然無法獲取api/products/1。我收到的消息:「{」Message「:」沒有找到與請求URI匹配的HTTP資源'http:// /api/products/1'.","MessageDetail":"沒有在控制器上找到操作'產品'匹配請求。「}」 –
@MaximusDecimus,你有沒有在基於會議的路線之前添加它,如在回答中建議的? – Nkosi
是的,我做了同樣的回答 –