ASP.NET WebApi に問題があり、何か問題があるかどうかわかりません。
この問題は、クライアントがコンテンツ タイプが XML の要求を行うたびに発生します。JSONで完全に機能します。
(この問題は XmlSerializer と DataContractSerializer の両方で発生します)
クリーンな WebApi プロジェクトで問題を再現しました。テストコントローラーは次のとおりです。
public class ValuesController : ApiController
{
private readonly Repository _repository = new Repository();
// GET /api/values
public IQueryable<Model> Get()
{
return _repository.Items;
}
// GET /api/values/5
public Model Get(int id)
{
return _repository.Items.FirstOrDefault(m => m.Id == id);
}
// POST /api/values
public HttpResponseMessage Post(Model model)
{
return new HttpResponseMessage<Model>(model, HttpStatusCode.OK);
}
}
public class Repository
{
public Repository()
{
_models = new List<Model>();
_models.Add(new Model { Id = 1, Name = "A", Values = new[]{"Foo", "Bar"} });
}
private readonly List<Model> _models;
public IQueryable<Model> Items
{
get { return _models.AsQueryable(); }
}
}
public class Model
{
public int Id { get; set; }
public string Name { get; set; }
public string[] Values { get; set; }
}
ご覧のとおり、Post メソッドは受信したデータのエコーを返しているだけです。データは Get(int) メソッドの出力から取得されます。
出力を取得:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Model>
<Id>1</Id>
<Name>A</Name>
<Values>
<string>Foo</string>
<string>Bar</string>
</Values>
</Model>
</ArrayOfModel>
投稿リクエスト:
POST http://localhost:50798/api/values HTTP/1.1
User-Agent: Fiddler
Host: localhost:50798
Accept: application/xml
Content-Type: application/xml
Content-Length: 110
<Model>
<Id>1</Id>
<Name>A</Name>
<Values>
<string>Foo</string>
<string>Bar</string>
</Values>
</Model>
レスポンス本文の投稿:
<?xml version="1.0" encoding="utf-8"?>
<Model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Id>1</Id>
<Name>A</Name>
<Values/>
</Model>
すでに述べたように、すべてが JSON コンテンツで問題なく機能します。