1

次の API を作成します。

  • /api/検証/1

  • /api/verifications/getfoo/1

コントローラーのメソッド:

public string Get(int id)
        {
            return "value";
        }

public string GetFoo(int id)
        {
            return "value";
        }

WebApiConfig:

config.Routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{id}", new { id = RouteParameter.Optional }, new { id = @"\d+" });
config.Routes.MapHttpRoute("DefaultApiWithAction", "Api/{controller}/{action}/{id}", new { id = RouteParameter.Optional });

このような構成では、アクセスできます/api/verifications/getfoo/1/api/verifications/1、例外が発生します:要求に一致する複数のアクションが見つかりました

デフォルトの Get メソッドと名前付き Get メソッドを持つようにルートを構成するにはどうすればよいですか?

4

2 に答える 2

2

action最初のルートに を指定するだけでよいと思います。例えば:

config.Routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{id}", new { action = "Get", id = RouteParameter.Optional }, new { id = @"\d+" });
于 2013-05-24T11:39:10.960 に答える
0

ここでは、アクション名の標準的な命名規則を無視しています。通常、Getメソッドは、使用可能なすべてのアイテムを返すためにパラメーターなしでリクエストにバインドされます。私としては、アクションごとに異なる特定の名前を定義するGetOneKindOfThingsことGetOtherKindOfThingsをお勧めします。たとえば、API をより自己記述的にすることです。

とにかく、次のトリックを使用して、フレームワークがルートを正しく理解できるようにすることができます。

public string Get(int defaultId)
        {
            return "value";
        }

public string GetFoo(int id)
        {
            return "value";
        }

config.Routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{defaultId}", new { defaultId = RouteParameter.Optional }, new { id = @"\d+" });
config.Routes.MapHttpRoute("DefaultApiWithAction", "Api/{controller}/{action}/{id}", new { id = RouteParameter.Optional });
于 2013-05-24T12:07:48.713 に答える