Asp.net web api 使用XML时,ASP.NET Web API为对象返回NULL
我试着按照我找到的说明去做,但还是不行 我有以下课程Asp.net web api 使用XML时,ASP.NET Web API为对象返回NULL,asp.net-web-api,Asp.net Web Api,我试着按照我找到的说明去做,但还是不行 我有以下课程 public class TodoItem { public int Id { get; set; } public string Name { get; set; } public bool IsComplete { get; set; } public TodoItem() { } } 我的服务器有以下POST方法 public IHttpActionRes
public class TodoItem
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
public TodoItem() { }
}
我的服务器有以下POST方法
public IHttpActionResult Post([FromBody]TodoItem item)
{
if (item != null)
{
TodoRepository.Current.Add(item);
return Ok(item);
}
return BadRequest("Object is null");
}
在我的WebApiConfig.cs中,我添加了以下行
config.Formatters.XmlFormatter.UseXmlSerializer = true;
在客户端,我使用HttpClient,如下所示:
var postTask = client.PostAsXmlAsync<TodoItem>("", item);
var poststask=client.PostAsXmlAsync(“,item”);
服务器上我的Post方法接收到item对象的null。谢谢,在Nilesh Thakkar的帮助下解决了这个问题 我添加了以下扩展方法
public static class HttpExtensions
{
public static Task<HttpResponseMessage> PostAsXmlWithSerializerAsync<T>(this HttpClient client, string requestUri, T value)
{
return client.PostAsync(requestUri, value,
new XmlMediaTypeFormatter { UseXmlSerializer = true });
}
}
公共静态类HttpExtensions
{
公共静态任务PostAsXmlWithSerializerAsync(此HttpClient客户端,字符串requestUri,T值)
{
返回client.PostAsync(requestUri,值,
新的XmlMediaTypeFormatter{UseXmlSerializer=true});
}
}
来自HttpClient的调用现在看起来
var postTask = client.PostAsXmlWithSerializerAsync<TodoItem>("", item);
var poststask=client.PostAsXmlWithSerializerAsync(“,item”);
谢谢,在Nilesh Thakkar的帮助下解决了问题
我添加了以下扩展方法
public static class HttpExtensions
{
public static Task<HttpResponseMessage> PostAsXmlWithSerializerAsync<T>(this HttpClient client, string requestUri, T value)
{
return client.PostAsync(requestUri, value,
new XmlMediaTypeFormatter { UseXmlSerializer = true });
}
}
公共静态类HttpExtensions
{
公共静态任务PostAsXmlWithSerializerAsync(此HttpClient客户端,字符串requestUri,T值)
{
返回client.PostAsync(requestUri,值,
新的XmlMediaTypeFormatter{UseXmlSerializer=true});
}
}
来自HttpClient的调用现在看起来
var postTask = client.PostAsXmlWithSerializerAsync<TodoItem>("", item);
var poststask=client.PostAsXmlWithSerializerAsync(“,item”);
我相信这个答案也很有用。PostAsXmlAsync使用XmlMediaTypeFormatter,它在内部使用DataContractSerializer,DataContractSerializer按字母顺序(XmlSerializer-按定义的顺序)从DataContract创建XML。
因此,在DataMemberAttribute类中使用“Order Parameter”有助于解决PostAsXmlAsync反序列化问题:
[DataMember(Order=index)]
我相信这个答案也很有用。PostAsXmlAsync使用XmlMediaTypeFormatter,它在内部使用DataContractSerializer,DataContractSerializer按字母顺序(XmlSerializer-按定义的顺序)从DataContract创建XML。
因此,在DataMemberAttribute类中使用“Order Parameter”有助于解决PostAsXmlAsync反序列化问题:
[DataMember(Order=index)]
我在您的通话中看不到url。e、 gvar respone=wait-httpClient.PostAsXmlAsync(requestUri,Item)代码>如何调用方法?URL设置如下client.BaseAddress=newURI(“http://localhost:5342/api/todos/");代码>当我使用poststask=client.PostAsJsonAsync(“,item”)时,它工作得非常好你能试试上面提到的答案吗?我在你的电话里看不到url。e、 gvar respone=wait-httpClient.PostAsXmlAsync(requestUri,Item)代码>如何调用方法?URL设置如下client.BaseAddress=newURI(“http://localhost:5342/api/todos/");代码>当我使用poststask=client.PostAsJsonAsync(“,item”)时,它工作得非常好你能试试上面提到的答案吗