0

コントローラーのルーティングとアクションの選択に問題があります。私のルーティングは次のようになります。

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 に一致します)。

この問題を解決する方法はありますか?

THX

4

1 に答える 1

0

ルーティングを次のように変更できます。

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)
{
}

そして、次の 1 つのルートを使用できます。

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "{controller}/{id}/{action}",
    defaults: new { id = RouteParameter.Optional, action = "default" });
于 2013-06-19T08:47:51.757 に答える