gpt4 book ai didi

c# - Web API 无法使用 utf-16 编码的 XML 为 POST 绑定(bind)模型

转载 作者:数据小太阳 更新时间:2023-10-29 02:39:12 28 4
gpt4 key购买 nike

我有一个带有 POST 方法的简单 Web API Controller ,它接受一个对象。当客户端将数据作为 JSON 发布时,API 工作正常。即使数据以 encoding="utf-8" 的形式作为 XML 发送,模型也会无缝绑定(bind)(我在 WebApiConfig 中添加了以下行使用 Xml Serialization 而不是 DataContract)

config.Formatters.XmlFormatter.UseXmlSerializer = true;

下面是我的 ApiController:

public class InfoController : ApiController
{
public HttpResponseMessage Post(InfoRequest infoRequest)
{
//do work and return something
return Request.CreateResponse(HttpStatusCode.Accepted, infoRequest != null);
}
}

与类型

public class InfoRequest
{
public string Id { get; set; }
public int Total { get; set; }
public Status Status { get; set; }
}

public enum Status
{
None = 0,
Confirmed,
Cancelled
}

现在当客户端根据一组数据发出请求时,它工作正常

Content-Type: application/json
body:
{
"Id": "ACARG021",
"Total": 20,
"Status": "Confirmed"
}

这也很好用

Content-Type: application/xml
body:
<?xml version="1.0" encoding="utf-8"?>
<InfoRequest>
<Id>ACARG021</Id>
<Total>20</Total>
<Status>Confirmed</Status>
</InfoRequest>

但是,当使用 UTF-16 发布 XML 时,模型绑定(bind)失败并且 Controller 方法将 null 传递给它。

Content-Type: application/xml; charset=utf-16
//Accept-Charset: utf-16 //Edit: wrong header, removed
body:
<?xml version="1.0" encoding="utf-16"?>
<InfoRequest>
<Id>ACARG021</Id>
<Total>20</Total>
<Status>Confirmed</Status>
</InfoRequest>

正如其他一些 SO 帖子所建议的那样,将此添加到 WebApiConfig 没有帮助

Encoding utf16 = Encoding.GetEncoding("utf-16");
config.Formatters.XmlFormatter.SupportedEncodings.Add(utf16);

最佳答案

在服务器端,这应该是开箱即用的。所以我想问题是你的帖子。内容类型 header 应具有正确的编码。将 XML 本身中的 header 更改为 encoding="utf-16"是不够的。尝试:

Content-Type: application/xml; charset=utf-16

您还需要以该编码实际发送数据,而不仅仅是更改 header 。

关于c# - Web API 无法使用 utf-16 编码的 XML 为 POST 绑定(bind)模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39919822/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com