2015-10-07 6 views
6

パラメータパスパラメータを持つルートとの1:は、私は私のAPIのメソッドを取得する必要がしたい

API /人/ {PERSONID}

と?クエリパラメータを持つルートとの1:

API /人テキスト=何か

しかし、私はこのコードを置く場合:?

// GET: api/people/{personId} 
[Route("api/people/{personId}")] 
[HttpGet] 
public HttpResponseMessage Get(long personId) 
{ 
} 

// GET: api/people?text=something 
[Route("api/people")] 
[HttpGet] 
public HttpResponseMessage Get(string text) 
{ 
} 

をそして/API /人/ 1を開こうと、私は/API /人のテキストを開こうとすると、それは間違ったフォーマットを言って=何かそれは働く私はそれらの両方の作業ができどのよう

config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 

私は唯一の定義されたデフォルトルートを持っていますか?それがパスパラメータであれば最初のものに行き、クエリパラメータであれば2番目に行くと定義しますか?

+0

'long'を' int'に変更するとどうなりますか? (好奇心から)。しかし、良い質問です。私はまだ答えがわからない。このコードを見ても問題はないとは思っていませんでした。 –

+0

私はこの正確なシナリオをWeb API 2.2でテストしています。あなたは古いWeb APIバージョンを使用していると思います。 –

+0

@JayMee 'long'または' int'結果が同じです –

答えて

4

Web API 2を使用してこれをVisual Studio 2015に入れても問題ありません。私は、次の行を追加する必要がありました(各コントローラメソッドに1つ)。

return Request.CreateResponse(HttpStatusCode.OK); 

また、Default Route Configを吹き飛ばしました。私はIEでこれらのURLを入れたときに、私は私のコントローラの両方のそれぞれの方法を打つ

http://localhost:64377/api/people?text=Hello

http://localhost:64377/api/people/1

次のURLはうまく動作します。

+0

これは問題がDefault Route Configだったと思います。ありがとうございました! ;) –

+0

問題ありません。乾杯! –

関連する問題