1

オブジェクト「ContentList」をパラメーターとして受け取るこのAPIコントローラーアクションがあります。

    [HttpPost]
    public List<string> SendList(string param, ContentList list)
    {
        List<string> testReturn = new List<string> { "test1", "test2", "test3", "test4" };

        return testReturn ;

    }

私がこれまでに試したことは、次のようなコントローラー アクションを呼び出すことです。

        Uri _uri = new Uri("http://localhost:xxxxx/api/FakeTest/SendList?param=test");

        var serializer = new JavaScriptSerializer();
        string requestData = serializer.Serialize(new
        {
            list = ContentList,
        });

        using (var client = new WebClient())
        {
            client.Headers[HttpRequestHeader.ContentType] = "application/json";

            var result = client.UploadData(_uri, Encoding.UTF8.GetBytes(requestData));

            var tempString = Encoding.UTF8.GetString(result);
        }

この例では、コントローラ アクションによって返される te​​mpString = ["test1","test2","test3","test4"] です。

コントローラー アクションでは、渡された ContentList のプロパティにアクセスし、それらの値を返すことができます (もちろん、それに応じてアクションの戻り値を変更します)。

ただし、コントローラー アクションでは、さらに処理するために ContentList オブジェクトを送信する必要がありますが、これは失敗しているようです。500 内部サーバー エラーが発生し、コントローラーにブレークポイントを設定して、渡された値を追跡することができません。デバッガーはそれにヒットしません...

これは、json をコントローラー アクションに送信することと関係があると思います。

とにかく、ContentList はコントローラー アクションから送信されたコードによって拒否されているようです。

要するに、問題は、コードからコントローラー アクションを呼び出し、C# オブジェクトを渡し、コントローラー アクションから使用できるようにする正しい方法は何かということです。

4

1 に答える 1

1

MVC 3 を使用している場合、コントローラーは json データを直接的に受け取り、解析できるはずです。MVC 2 を使用している場合は、アプリケーションに新しいファクトリを登録して、コントローラーでの json 解析を処理する必要があります。

protected void Application_Start() 
{
  RegisterRoutes(RouteTable.Routes);
  ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}

この件に関する詳細情報: http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx

于 2012-09-18T11:16:44.407 に答える