2

ASP.NET Web API REST サービスを構築しています。

私が処理しなければならない呼び出し (URL) は別の関係者によって修正されており、多数のクエリ文字列パラメーターがあります。

コントローラーに多数のパラメーターを持たせるのではなく、クエリ パラメーターをオブジェクトにマップし、それをコントローラーに渡す方法はありますか?

GetQueryNameValuePairs を使用してコントローラー内でそれらにアクセスできることはわかっていますが、この方法でデータ バインディングを使用する方法があるかどうか疑問に思っていました。

4

3 に答える 3

2

ASP.NET Web API では、モデル オブジェクトをコントローラーに渡すときに [FromUri] を使用する必要があるようです。例えば:

public HttpResponseMessage Post([FromUri] MyModel model) { ... }

詳細については、このMSDN ブログ投稿を参照してください。

于 2012-09-01T16:02:17.577 に答える
2

はい、

モデルを定義します。例:

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

次に、アクションを調整します。

public HttpResponseMessage Put(InputModel model) { ... }

MVC と同様に、API コントローラーはModel Bindingをサポートします。これを処理するためのインフラストラクチャが用意されており、それ自体が拡張可能です。ASP.NET MVC モデル バインディングの例を Google で検索します。

于 2012-08-31T09:28:02.590 に答える
1

単純にクエリ文字列パーサーを作成します。

protected IDictionary<string, string> GetQueryParameters(string queryString)
{
    var retval = new Dictionary<string, string>();
    foreach (var item in queryString.TrimStart('?').Split(new[] {'&'}, StringSplitOptions.RemoveEmptyEntries))
    {
        var split = item.Split('=');
        retval.Add(split[0], split[1]);
    }
    return retval;
}

そして、コントローラー呼び出しから:

public class DummyController : ApiController
{
    [HttpGet]
    public string SayHello(string name="")
    {
        var q = GetQueryParameters(Request.RequestUri.Query);

        return string.Format("Hello {0}", name);
    }
}
于 2012-08-31T10:02:13.270 に答える