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);
        }

在此示例中, tempString = ["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 回答