2016-04-24 13 views
1

で指定されたものを除き、結合のすべてのパラメータは、私のようなウェブAPIコントローラ持っ無視:?私は コントローラ/ MyActionのparam1 = A & PARAM2 = Bのすべてのような要望をお持ちの場合はexcplicitlyアクション署名

public HttpResponseMessage MyAction(string param1, string param2) 
{ 
//do whatever 
} 

をよく、良い。

しかし、私は& excessParam B コントローラ/ MyAction?のparam1 = A & PARAM2 =のようなものを持っている場合= C

その後、私は何もアクションが見つからなかったことを取得します。私はそのWeb apiのバインディングルール/優先順位のために理解しています。

コントローラアクションシグネチャで明示的に指定されたものを除いて、リクエストで送信されたすべてのパラメータを単純に無視する方法があるのは興味がありますか?

ps。 私はまだ行動の署名で指定する必要があるので、オプションのパラメタについて話していません。

ウェブAPIバインディングの性質とは少し違うと理解していますが、これは重複する/曖昧なバインディングの問題を引き起こす可能性があると確信していますが、

答えて

1

しかし、私は& excessParam B コントローラ/ MyAction?のparam1 = A & PARAM2 =のようなものを持っている場合= C

その後、私は何もアクションが見つからなかったことを取得します。

いいえ、それは本当ではありません。

Controller/MyAction?param2=b&excessParam=c 

余分なパラメータは、Web APIによって無視され、あなたにどんなトラブルが発生することはありません:あなたは知らパラメータの一部を提供しない場合404を取得します。その後、

public class MyModel 
{ 
    public string Param1 { get; set; } 
    public string Param2 { get; set; } 
} 

と::また知らパラメータを含むモデルを記述

public IHttpActionResult MyAction(string param1 = null, string param2 = null) 
{ 
} 

:あなたはそれらのパラメータはオプションで作ることができ、これらの404エラーを回避するために

public IHttpActionResult MyAction([FromUri] MyModel model) 
{ 
} 
+0

何を言いたいのかわからないけど、もし私が証明すれば、私はそれを保証することができますすべての既知のパラメータとメソッドシグネチャにない1つの余分なパラメータは、次のようなメッセージです。 '要求URIに一致するHTTPリソースが見つかりませんでした。' –

+0

私はちょうどそれをテストしてサービスが問題なく動作したため保証されません、私はそれに投げる過度のクエリ文字列パラメータに関係なく。おそらくカスタムコードやモデルバインダーがあなたのソリューションにありますが、そのような振る舞いはありますが、すぐに利用できるASP.NET Web APIプロジェクトではそうではありません。新しいWeb APIプロジェクトを作成し、自分で試してみてください。だからあなた自身が尋ねるべき質問は、このカスタムコードがあなたのソリューションにどこにあるので、そこに修正しようとすることができるかということです。ところで、私は示唆したビューモデルアプローチを試しましたか? –

+0

hm ...それは変です。あなたが間違っていると言っているのではなく、なぜ私の側でそれがうまくいかないのだろうと思っています。パイプライン内の何かがそれをねじ込むかどうかを調べるためにここでいくつかのテストをしましょう。 –