オブジェクト「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);
}
この例では、コントローラ アクションによって返される tempString = ["test1","test2","test3","test4"] です。
コントローラー アクションでは、渡された ContentList のプロパティにアクセスし、それらの値を返すことができます (もちろん、それに応じてアクションの戻り値を変更します)。
ただし、コントローラー アクションでは、さらに処理するために ContentList オブジェクトを送信する必要がありますが、これは失敗しているようです。500 内部サーバー エラーが発生し、コントローラーにブレークポイントを設定して、渡された値を追跡することができません。デバッガーはそれにヒットしません...
これは、json をコントローラー アクションに送信することと関係があると思います。
とにかく、ContentList はコントローラー アクションから送信されたコードによって拒否されているようです。
要するに、問題は、コードからコントローラー アクションを呼び出し、C# オブジェクトを渡し、コントローラー アクションから使用できるようにする正しい方法は何かということです。