1

MVC 4 Web サービスに新しいユース ケースがあります。クエリ文字列の引数のリストを Web API に渡す必要があります。

http://host/SomeWebApi?arg=x&arg=y

ICollection<string> arg以前は、コントローラーのパラメーターとして使用して、Web サイトコントローラーでこれを簡単かつ簡単に実行しました。これは現在機能していますが、これは API ではなく Web ページです。

今、同じことの Web API バージョンを機能させようとして頭を壁にぶつけています。以下の簡単なテスト インターフェイスを作成しましたが、コレクション arg は常に null です。私も試してみましList<string>string[]。私は何を見落としていますか?

ルート登録:

config.Routes.MapHttpRoute(
    name: "Experiment",
    routeTemplate: "Args",
    defaults: new
    {
        controller = "Storage",
        action = "GetArgTest",
        suite = UrlParameter.Optional,
    },
    constraints: new
    {
        httpMethod = new HttpMethodConstraint(new HttpMethod[] { new HttpMethod("GET") })
    }
);

Web API コントローラー コード:

public string GetArgTest(ICollection<string> suite)
{
    if (suite == null)
    {
        return "suite is NULL";
    }
    else
    {
        return "suite is NON-NULL";
    }
}

「suite is NULL」という結果になるクエリ文字列をテストします。

http://localhost:5101/Args?suite=1&suite=2
4

1 に答える 1

2

この回答ApiController Action Failing to parse array from querystringに出くわし、これを解決するにはFromUriAttribute. あなたの例では:

public string GetArgTest([FromUri]ICollection<string> suite)
{
}

これは、通常、クエリ文字列ではなく投稿データを含めるより多くの POST および PUT 要求を実行することが期待される API コントローラーを使用すると、理にかなっていると思います。

于 2014-10-13T10:10:07.230 に答える