1

これは、asp.netWebAPIプロジェクト全体で多くのメソッドを管理する際の単純な問題です。

このような方法はかなりあります。

ProductsApiController.GetByType(string type, string x)
ProductsApiController.GetByType(string type, int limit)
//method has a number of arguments.. 
ReportsApiController.GetAll(string x, string y)

問題:カスタムパラメータを持つメソッドがたくさんあり、それぞれにカスタムルートを定義する必要があります

routes.MapRoute(
    name: "ProductRoute",
    url: "ProductsApiController/{type}/{x}"
);

routes.MapRoute(
    name: "ReportRoute",
    url: "ReportsApiController/{x}/{y}"
);

シグニチャを単純化しています。多くのパラメータを持つメソッドがたくさんあり、これらのメソッドには通常、共通のパラメータがありません。

これの一般的なパターンは何ですか?これを行うためのより良い方法はありますか、それとも私はこれだけを残していますか?

4

2 に答える 2

1

あなたのシナリオでは、最も論理的な解決策は属性ルーティングを使用することです。

はい、それでも多くのルートを作成する必要があることを意味しますが、それらは実質的に 1 つのアクションに関連付けられているため、このアクションを装飾する属性にルートを含めることが最も理にかなっています。

Nuget から AR を取得できます。

PM> Install-Package AttributeRouting.WebApi

あなたの場合、次のようになります。

[GET("mytype/{type}/{x}")]
public MyType GetByType(string type, string x)

[GET("mytype/{type}/{limit}")]
public MyType GetByType(string type, int limit)

など...これは、IMHOの方がはるかに管理しやすい

少し前に、AR の紹介記事を書きました - http://www.strathweb.com/2012/05/attribute-based-routing-in-asp-net-web-api/

また、優れた wiki にアクセスすることもできます - https://github.com/mccalltd/AttributeRouting/wiki

于 2013-01-11T15:44:18.910 に答える
1

これは、クエリ文字列で URI パラメーターを渡すことが非常に便利になるケースです。ルートを 1 つだけ定義して、そのアクションのすべての URI パラメーターをクエリで渡すことができます (ReportsApi/GetAll?x=5&y=6 など)。アクション ({controller}/{action}) も含むパス テンプレートを使用してルートを定義するだけです。

それ以外の場合、すべてのパラメーターをパス内でさまざまな方法で渡したい場合、より良い方法は考えられません。各パラメーターを取得する場所とバインドするパラメーター名をルーティング システムに知らせる必要があるためです。クエリ文字列パラメーターのようにパラメーター名を決定するための規則はありません。以下の属性ルーティングを使用するという Filip の良い提案を調べることができます。記述しなければならないルートの数が減ることはありませんが、少なくともルートが必要なコードにより近くなります。

于 2013-01-11T13:36:41.707 に答える