1

ルート定義は次のとおりです。

routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{*data}",
            defaults: new { data= RouteParameter.Optional }
        );

今、製品コントローラーで、次のように定義されたアクションがあります。

public string Get(string data="")
{
    return "value";
}

http-get次のURLでテストします

api/product/   
api/product/apple

両方とも働いています

しかし、このURLを使用すると

api/product/?p=5

それは例外をスローします

No action was found on the `controller` 'product' that matches the request.

問題を解決するために、このような別のアクションを定義できることを理解しています

public string Get(int p,string data="")
{
    return "value";
}

しかし、それは私にとってはうまくいきません。urlパラメーターの名前またはパラメーターの値のいずれかのパラメーターが予測できないためです。

だから、私の質問は

http-getURL で使用されているクエリ文字列の種類に関係なく、このコントローラーに送信されるすべての要求を処理する単一のアクションを定義する方法はありますか?

4

1 に答える 1

0

Get を WebAPI でオーバーロードできます。

public string Get(int p) {}
public string Get(string data) {}

これは、パラメーターを渡さない場合を除きますが、シナリオについて理解していることから、いずれかのメソッド (名前または値) を適用する必要があるため、これで問題ありません。

于 2012-06-06T17:31:49.483 に答える