0

次のような Api コントローラーを検討してください。

public class MyApiController
{
    [HttpGet]
    public IEnumerable<object> GetItems(int from, int count)
    {
        ...
    }

    [HttpGet]
    public IEnumerable<object> GetActiveItems(int from, int count)
    {
        ...
    }
}

私が呼び出すと、パラメーターの類似性のためではなく/MyApi/GetActiveItems/?from=0&count=20、アクションをルーティングすることができます。たとえば、パラメーター名を変更すると、正しく機能します。GetItemsGetActiveItems(int fromActive, int countActive)

どうしてこんなことに?メソッド名と一致するアクション名を使用しないのはなぜですか?

ルーティングで何かをする必要がありますか?

4

1 に答える 1

2

問題は、通常以外の場所に設定された不適切なルーティングに関するものだったようです。

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

その後、正しいルーティングがありました:

routes.MapHttpRoute(
                name: "DefaultProvider",
                routeTemplate: "api/{controller}/{action}"
            );

この場合、{action}最初のルーティングでは使用していないため、アクション名は に{id}なり、ルーティングはそのパラメーターによってアクションを解決しようとします。

于 2013-09-14T05:47:34.130 に答える