0

複数の get メソッドを持つ apicontroller のルーティング構成を見つけようとしています。

コントローラ クラスには 3 つのメソッドがあります。

Public Function GetAllProducts() As IEnumerable(Of Product)
Public Function GetProductById(prodid As Integer) As Product
Public Function GetProductByCategory(categoryName As String) As Product

3 つの方法すべてに必要なルーティング構成を提案してください。

4

3 に答える 3

2

私たちは通常、apigee の Web API 設計ガイドラインに従います。これは、世界中で成功を収めているいくつかの Web API で使用されているパターンのコレクションです。

ガイドラインでは、Web API リソースを整理するために以下のチャートを提案しています。理想的なシナリオは、リソースごとに 2 つのベース URL のみを保持することです。

ここに画像の説明を入力

特定のケースでは、リソースは「製品」であるため、次の URL をお勧めします。

  • /製品
  • /products/{id}
  • /products?categoryName={カテゴリ名}

また、Web API テーブルのルートは、次のように非常に簡単に構成できます。

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new
    {
        id = RouteParameter.Optional,
        action = RouteParameter.Optional
    });
于 2013-05-09T15:19:11.323 に答える
2

カテゴリが複数の製品を返す可能性があると想定しています。

VB では、次のようなオプションのパラメーターを使用します。

Public Function GetProducts(Optional category As String = "") As IEnumerable(Of Product)
Public Function GetProduct(ByVal id as Integer) As Product

またはC#

public IEnumerable<Product> GetProducts(string category = "")
public Product GetProduct(int id)

次のような URL を使用します。

/api/product
/api/product/1
/api/product?category=myCategory

デフォルトのルートはそのままにしておきます。

于 2013-05-09T20:16:52.967 に答える
1

最後に、解決策があります。パラメータの型に応じてメソッドを呼び出せるルーティング設定を探していました。

       config.Routes.MapHttpRoute( _
        name:="apiById", _
        routeTemplate:="api/{controller}/{prodid}", _
        defaults:=New With {.controller = "Products"}, constraints:=New With {.prodid 
        = "^\d+$"})

    config.Routes.MapHttpRoute( _
        name:="apiByname", _
        routeTemplate:="api/{controller}/{categoryName}", _
        defaults:=New With {.controller = "Products"}) 


    config.Routes.MapHttpRoute( _
       name:="apiByAction", _
       routeTemplate:="api/Products", _
       defaults:=New With {.controller = "Products"})

見つからないリンクは、最初のルートで制約を使用して、数値のみを受け入れるように指定していました。例: api/products/1 2 番目の構成は、カテゴリ名の URL で指定された文字列値などの残りの要求を処理します 例: api/products/books 3 番目の構成は、パラメーターを持たないアクション メソッドへのすべての要求にルーティングします

また、 prodid,categoryname などの正しいパラメーター名 routetemplate を使用することも重要です。名前は、対応するアクション メソッドで宣言されているものと同じである必要があります。

于 2013-05-10T15:10:56.643 に答える