2015-12-14 14 views
7

私はそれに2つのGETメソッドを持つasp.net web apiコントローラを持っています。 1つは文字列パラメータを受け取り、もう1つはintパラメータを受け取ります。私はその場所にWeb APIを設定したデフォルトルートしか持っていません。同じWeb APIコントローラ内で、異なるパラメータタイプの2つのGETメソッドを使用できますか?

URLにint値を渡すたびに、文字列パラメータを受け取るGETメソッドが呼び出されます。 intパラメータをとるGETメソッドは呼び出されません。

同じコントローラ内で異なるパラメータタイプの2つのGETメソッドを使用することはできますか?

-Edit- 正確に同じパラメータタイプで約2つのメソッドを尋ねるので、提案された重複する質問は異なります。異なるパラメータタイプについて質問しています。

答えて

14

はい、可能です。既定の構成のままの状態で、searchTermをクエリ文字列パラメータとして渡していると仮定して、動作する必要があります。しかし、たとえば/api/myurl/blahのようにURLの一部としてURLを渡そうとすると、デフォルトの経路指定ルーティングでは、メソッドのintバージョンと一致してエラーが返されます。デフォルト設定を編集するか、Attribute Routingを使用する必要があります。

一般に、WebApiではあまり有用でないため、通常は無効にしてAttribute Routingを使用します。

あなたWEBAPIの設定に

config.MapHttpAttributeRoutes(); 

を追加し、ルーティング属性を有効にします。

は、その後、あなたが

/api/myobject?searchTerm=blah 

/api/myobject/1 

と、彼らはshouldnを介して第2を介して第一の方法を呼び出すことができ、今な

[HttpGet] 
[Route("api/myobject/")] 
public HttpResponseMessage GetSearchResults(string searchTerm) 
{ 
    HttpResponseMessage response; 
    //Do Work 
    return response; 
} 

[HttpGet] 
[Route("api/myobject/{id:int}")] 
public HttpResponseMessage Get(int id) 
{ 
    HttpResponseMessage response; 
    //Do Work 
    return response; 
} 

としてあなたの方法をマークアップすることができます衝突しない。あなたはsearchTermが代わりにクエリパラメータのURLであることがしたい場合は

しかし、あなたはすべてのIDをキャッチします

[Route("api/myobject/{searchTerm}")] 

api/myobject/{id:int}ルートにルートを変更することができますし、api/myobject/{searchTerm}がキャッチします最も他に何か。ただし、URLがURLエンコードされていない場合、奇妙なことが起きやすいように注意してください。

あなたが探しているURLの形式が正確にわからないので、私が提供したものは単なる例に過ぎません。先に投稿したlinkは、属性ルーティングの詳細を解説しています。これにより、WebApiがMVCから継承した慣例によるルーティングよりも複雑なルートを作成することができます。

+0

優秀な説明 - 経路指定ルーティングが完璧に機能しました! – Aaron

+0

問題ありません。それが助けてくれてうれしい。 –

関連する問題