私は、オブジェクトを受け入れるPOST
メソッドを持つ単純なWeb APIコントローラを持っています。クライアントがJSON
としてデータを投稿すると、APIは正常に動作します。データはencoding="utf-8"
でXML
として送信された場合でも、モデルがシームレスに結合しWeb APIはutf-16でエンコードされたXMLを使用してPOST用のモデルをバインドできません
config.Formatters.XmlFormatter.UseXmlSerializer = true;
は私ApiControllerです(私はXml Serialization
代わりDataContract
の使用WebApiConfig
に次の行を追加している):
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
}
ここで、クライアントがda TA、それは
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>
しかし
だけでなく、正常に動作し正常に動作し、XMLを UTF-16に掲載されたときにモデルバインディングが失敗し、コントローラのメソッドはnull
を取得それに渡された。他のいくつかのSOの記事で示唆したように
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>
、WebApiConfig
にこれを追加すると、これは、箱から出して動作するはずサーバー側で
Encoding utf16 = Encoding.GetEncoding("utf-16");
config.Formatters.XmlFormatter.SupportedEncodings.Add(utf16);
デフォルトのjsonエンコーディングをリセットしてみましたか? https://blogs.msdn.microsoft.com/henrikn/2012/04/22/asp-net-web-api-content-negotiation-and-accept-charset/ –