アップデート
私の最初の仮定は、オプションのパラメーターが問題の原因であるというものでした。それは正しくないようです。代わりに、複数のアクション メソッドの 1 つに、いくつかのパラメーターの null 許容値型 (例: int? ) が含まれている場合、複数のアクション メソッドに問題があるように見えます。
私は Visual Studio 2012 RC を使用しており、Web API を使い始めたばかりです。問題が発生し、「要求に一致するアクションがコントローラ 'Bars' で見つかりませんでした」というエラーが表示されました。
Barsコントローラーを手に入れました。オプションのパラメーターを受け取る Get() メソッドがあります。
public IEnumerable<string> Get(string h, string w = "defaultWorld", int? z=null)
{
if (z != 0)
return new string[] { h, w, "this is z: " + z.ToString() };
else
return new string[] { h, w };
}
だから、私は次のURLでそれをテストします
- /api/bars?h=こんにちは
- /api/bars?h=こんにちは&w=世界
- /api/bars?h=hello&w=world&z=15
そして、それは3つすべてに機能します。
次に、別の Get() メソッドを追加します。今回は id パラメーターを 1 つ指定します。
public string Get(int id)
{
return "value";
}
URL をもう一度テストします。今度は /api/bars?h=hello&w=world と api/bars?h=hello が失敗します。エラー メッセージは、「要求に一致するアクションがコントローラ 'Bar' に見つかりませんでした」です。
何らかの理由で、これら 2 つの方法はうまく連携しません。削除するGet(int id)
と動作します。intに変更したら?z を文字列 z に変換すると動作します (ただし、アクション メソッド内のオブジェクトを変換する必要があります!)。
Web API がこれを行っているのはなぜですか? これはバグですか、それとも仕様ですか?
どうもありがとう。