如何使用c#将自定义对象POST到web api

本文关键字:POST web api 对象 自定义 何使用 | 更新日期: 2023-09-27 18:02:09

我有一个web api开发和部署。它与单元测试和使用fiddler一起工作。但是,如果我创建一个单独的项目并尝试向其发布数据,它会发送回400个坏请求错误。我正在寻找一种方法来张贴这个自定义对象使用客户端写在c#。与WCF不同的是,没有数据可以用来创建这些对象的代理,然后将其实例化并传递给调用方法。如何将自定义对象(如Customer)作为参数传递给方法?

URL为http://host/directory/api/customer/AddNewCustomer方法定义就像

[HttpPost]
public bool AddNewCustomer(Customer customerObj)

编辑

以下是我的客户端代码
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://host/directory/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.Timeout = TimeSpan.FromSeconds(30.0);
// strong typed instance
var values = new JObject();
values.Add("FirstName", "John");
values.Add("LastName", "Doe");
HttpContent content = new StringContent(values.ToString(), Encoding.UTF8,"application/json");
var response = client.PostAsJsonAsync("api/customer/AddNewCustomer", content).Result;

如何使用c#将自定义对象POST到web api

在尝试了许多解决方案后,我发现没有设置内容对象。这很奇怪,但事实就是如此。所以我尝试直接传递JObject而不将其转换为HttpContent,它工作

// strong typed instance
var values = new JObject();
values.Add("FirstName", "John");
values.Add("LastName", "Doe");
// this is not set!!!
HttpContent content = new StringContent(values.ToString(), Encoding.UTF8,"application/json");
var response = client.PostAsJsonAsync("api/customer/AddNewCustomer", values).Result;

理想情况下,Customer将位于一个单独的模型类库中,您可以在项目之间共享该dll。但是任何具有相同属性名的对象都可以工作,因为web API会将它们序列化为Json或xml,并自动进行映射。