繁体   English   中英

ASP.NET Web API路由和操作选择

[英]ASP.NET Web API routing and action selection

我对控制器的路由和操作选择有问题。 我的路由如下所示:

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

我的控制器看起来像:

[HttpGet]
public Customers GetCustomers()
{
}

[HttpGet]
public Customer GetCustomerDetail(int id)
{
}

[ActionName("orders")]
[HttpGet]
public Orders GetCustomerOrders(int id)
{
}

我可以致电http://localhost/customers和我可以致电http://localhost/customers/1/orders 但是,当我尝试调用http://localhost/customers/1我会收到错误消息:“找到了多个与请求匹配的动作:”(与GetCustomerDetail和GetCustomerOrders匹配)。

任何想法如何解决这个问题?

谢谢

您可以将路由更改为:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "{controller}",
    defaults: new { action = "GetCustomers" });

config.Routes.MapHttpRoute(
    name: "DefaultApiWithIdAndAction",
    routeTemplate: "{controller}/{id}/{action}",
    defaults: new { action="GetCustomerDetail" });

编辑:如果所有的控制器方法都遵循相同的模式,则可以执行以下操作:

[ActionName("default")]
[HttpGet]
public Customers GetCustomers()
{
}

[ActionName("default")]
[HttpGet]
public Customer GetCustomerDetail(int id)
{
}

[ActionName("orders")]
[HttpGet]
public Orders GetCustomerOrders(int id)
{
}

然后,您可以使用一种路线:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM