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
是的,我做了同样的回答 –