Asp.net Web Apiによって生成されたデフォルトのテンプレートを使用しています。 Get()パートで作業しています:
_ // GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
_
何らかの理由で、クエリ文字列にアクセスするために必要なことは、入力文字列変数を作成することだけだと私は考えました。だから私は生成されたデフォルトのコントローラにもう1つの機能を作成しました(私が行った唯一の変更):
_ public IEnumerable<string> Get(string queryString)
{
return new string[] { "value3", "value4" };
}
_
私は両方のメソッドにブレークポイントを置きましたが、クエリ文字列を追加しても、常にパラメータなしで関数に行きます。したがって、_http://mybaseurl/api/values?foo=f
_に移動すると、get(string queryString)ではなくGet()になります。思ったように機能しませんか? Request.RequestUri.ParseQueryString();
を使用してGet()関数のクエリ文字列にアクセスできることは知っていますが、可能であればこのように分離することを好みます。
クエリ文字列のキー名は、アクションのパラメーター名と一致する必要があります。
/ api/values?queryString = f
public IEnumerable<string> Get(string queryString)
{
return new string[] { "value3", "value4" };
}
@ Kiran Challa の答えは正しいものの、URLパラメーターを直接取得したい状況はほとんどありませんURL。それらのシナリオでは、これを試してください:
using System.Net.Http;
var allUrlKeyValues = ControllerContext.Request.GetQueryNameValuePairs();
string p1Val = allUrlKeyValues.LastOrDefault(x => x.Key == "p1").Value;
string p2Val = allUrlKeyValues.LastOrDefault(x => x.Key == "p2").Value;
string p3Val = allUrlKeyValues.LastOrDefault(x => x.Key == "p3").Value;
これで、次のURLの場合、p1Valは「Apple」、p2Valは「Banana」、p3Valはnullになります。
.../api/myController?p1=Apple&p2=Banana
提案のおかげで、今、このテストのソースコードは GitHub にあり、Azure上でも実行され、テストできます。