WebAPIは着信リクエストのAccept:ヘッダーを無視しており、POCOオブジェクトを常にJSONとしてシリアル化しているようです。WizTools RestClientを使用してAPI呼び出しをテストし、リクエストHTTPヘッダーを設定しています。
GET /api/people/evh123
Accept: application/xml
コントローラを変更してリターンstring[]
またはその他のネイティブタイプにすると、期待どおりにXMLが取得されます。私のApplication_Start()
メソッドにこの行を追加することを提案する人が何人かいます。
GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;
しかし、私の場合、これは何の違いもありません。
私のAPIコントローラー:
using System.Web.Http;
using Spyglass.Api.Entities;
namespace Spyglass.Api.Controllers {
public class PeopleController : ApiController {
public Person Get(string personId) {
var member = new Person(personId) { FullName = "Eddie van Halen" };
return (member);
}
}
}
私のルート設定:
using System.Web.Http;
namespace Spyglass.Api {
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
config.Routes.MapHttpRoute(
name: "PeopleApi",
routeTemplate: "api/people/{personId}/{controller}/{id}",
defaults: new {id = RouteParameter.Optional, controller = "People"}
);
}
}
}
私のPOCO:
namespace Spyglass.Api.Entities {
public class Person {
public string PersonId { get; set; }
public string FullName { get; set; }
public Person(string personId) {
this.PersonId = personId;
}
}
}
POCOのカスタムシリアル化構成のようなものがありませんか?通常XMLシリアライザーの頭痛の種となる循環参照や複雑な型はありません...何かアイデアはありますか?