12

次のように、ネストされた1 対多タイプの階層データベースがあるとします。

1 つの地域には多くのがあります。それぞれのには多くの都市があります。都市1 つの国のみに属する必要があります。

この情報を RDBMS に抽象化するのは些細な作業ですが、(私の考えでは)特定の地域 IDの国のリストを返すための最も賢明な REST エンドポイントは、次のようなものです。

HTTP GET http://localhost/Region/3/Countries

既定では、.NET Web API のルーティングはせいぜい、http://localhost/Countries/Region/3またはhttp://localhost/Region/Countries/3.

従うべき賢明な命名規則はありますか? または、URI を好きな形にできるようにルーティングをカスタマイズできますか?

4

2 に答える 2

22

ルーティングは、探している URL を取得するために十分にカスタマイズできる必要があります。「http://localhost/Region/3/Countries」の形式の URL が必要であると仮定すると、次のカスタム ルートを登録できます。

config.Routes.MapHttpRoute("MyRoute", "Region/{regionId}/Countries", new { controller = "Region", action = "GetCountries" });

これにより、「RegionController」クラスの「GetCountries」アクションにリクエストがディスパッチされます。URI から自動的にバインドされたモデルを取得するアクションに regionId パラメーターを設定できます。

あなたのケースではより適切かもしれないので、WebAPI の属性ルーティング パッケージをオンラインで探すことができます。

于 2013-01-15T13:58:01.630 に答える
3

ルーティングは非常に柔軟である必要があります。問題は、データをどのように提供するかです。考えているコントローラーは 1 つですか、それとも複数ありますか?

RegionController があった場合、ルートを構成できなかった理由がわかりません。

routes.MapHttpRoute(
    name: "CountryList",
    routeTemplate: "{controller}/{regionId}/countries"
);

そして対応する方法:

public CountryCollection Get(int regionId)

または、あなたの質問に何か欠けていますか?デフォルトのルーティングはどこから来ていますか?

彼らのドキュメントを見てください:

http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection http://www.asp.net/web-api/overview/web -api-routing-and-actions/routing-in-aspnet-web-api

于 2013-01-15T13:57:13.127 に答える