【问题标题】:Can RestSharp send a List<string> in a POST request?RestSharp 可以在 POST 请求中发送 List<string> 吗?
【发布时间】:2012-09-05 15:32:46
【问题描述】:

我正在尝试让RestSharp 使用我拥有的宁静服务。一切似乎都运行良好,除非我通过POST 传递的对象包含一个列表(在这种特殊情况下是string 的列表)。

我的对象:

public class TestObj
{
    public string Name{get;set;}
    public List<string> Children{get;set;}
}

当它被发送到服务器时,Children 属性将作为带有内容System.Collections.Generic.List`1[System.String] 的字符串发送。

这就是我发送对象的方式:

var client = new RestClient();
var request = new RestRequest("http://localhost", Method.PUT);

var test = new TestObj {Name = "Fred", Children = new List<string> {"Arthur", "Betty"}};
request.AddObject(test);
client.Execute<TestObj>(request);

是我做错了什么,还是 RestSharp 中的错误? (如果有区别,我使用的是 JSON,而不是 XML。)

【问题讨论】:

    标签: json serialization restsharp


    【解决方案1】:

    这取决于您访问的服务器,但如果您访问的是 ASP.NET Web API 控制器(可能还有其他服务器端技术),如果您将集合中的每个项目添加到循环:

    foreach (var child in test.Children) 
        request.AddParameter("children", x));
    

    【讨论】:

    • 我认为这应该是最佳答案。没有一种正确的方法可以解决这个问题,我个人认为考虑到 IEnumerables 在 Web 框架中的流行程度,我个人认为 RestSharp 应该在默认情况下使用它。与我在这篇文章和类似文章中看到的其他解决方案相比,这个解决方案可以轻松封装并且不依赖外部库(这可能会在集合中的每个节点上引入一些开销)。
    【解决方案2】:

    使用AddJsonBody

    var client = new RestClient();
    var request = new RestRequest("http://localhost", Method.PUT);
    request.AddJsonBody(new TestObj {
         Name = "Fred", 
         Children = new List<string> {"Arthur", "Betty"}
    });
    client.Execute(request);
    

    API端

    [AcceptVerbs("PUT")]
    string Portefeuille(TestObj obj)
    {
        return String.Format("Sup' {0}, you have {1} nice children", 
            obj.Name, obj.Children.Count());
    }
    

    【讨论】:

    • 感谢@Koranger 的回答-您知道对象在参数中的外观-因此可以在服务器控制器中访问它吗?
    【解决方案3】:

    Guid 列表也有类似的问题。我的帖子会起作用,但列表永远不会有正确的数据。我破解了它并使用 json.net 序列化对象

    Issue I had on another stackoverflow post

    我知道这并不完美,但可以解决问题

    【讨论】:

    • 在处理 MVC 视图模型中的 IEnumerables 时,我使用 JSON 字符串以获得它的价值,所以我认为这根本不是一个糟糕的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多