3

私が見た Web API のほとんどの例は、URI を次の形式で示しています。

/api/values/   (returns all records)
/api/value/{id}    (returns a specific record)

この URI 規則が気に入らない場合も考えられますが、現在のプロジェクトでは完璧です。しかし、それは私にとってはうまくいかず、これを実現するために何ができたのかわかりません. 私にとっては、単数形でも複数形でもどちらでもかまいません。

コントローラー クラスの名前が ValuesController の場合、Web API は

/api/values/
/api/values/{id}

コントローラー クラスの名前が ValueController の場合、Web API は

/api/value/
/api/value/{id}

ADO.NET Entity Data Model を使用して、モデル デザイナーでいくつかのエンティティを作成しました。すべてに単一の命名規則があります。たとえば、Activity、State、Country、User などです。しかし、EF は複数のデータベース テーブルを作成しているように見えます。

これらのエンティティごとに APIController を作成しました。コントローラーで 2 つの命名規則 (複数形と単数形の両方) を試しましたが、URI で期待される (そして望ましい) 結果が得られません。Web API の複数形と単数形は、何を試しても常に同じです。

参考までに、自動的に作成されるデフォルトの API (ValuesController) を確認しました。すべてのレコードを返すには /api/values/ を指定する必要があり、単一のレコードを返すには /api/values/{id} を指定する必要があります。どちらも複数形であり、デフォルトではそうではなかったはずです。

これは何に影響しますか?複数形と単数形の URI の識別形式を構成/認識するロジックはどこにありますか?

4

1 に答える 1

6

RouteConfig.csWeb API のファイルで構成されている既定のルートは、次のcontrollerような という名前のパラメーターを指定します。

routes.MapHttpRoute("Default", "api/{controller}/{id}",
    new { id = RouteParameter.Optional };

/api/valuesまたは のいずれかを呼び出している場合/api/values/{id}、コントローラーのルート値valuesは両方のケースになります。したがって、Web API が規則によって解決するコントローラーはValuesController.

(自動複数形化はまったく実行されないことに注意してください。本当にその動作を実装したい場合は、 custom を実装できIHttpControllerSelectorます。ただし、そうしないことを強くお勧めします。)

于 2013-10-02T13:23:47.407 に答える