【发布时间】:2013-02-19 19:25:07
【问题描述】:
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 序列化程序头痛的循环引用或复杂类型......有什么想法吗?
【问题讨论】:
-
下面的答案可能是正确的(即构造函数);但是,我想指出这个答案,它涵盖了其他潜在问题,并为可能出现的其他问题提出了修复建议stackoverflow.com/questions/11804301/…
标签: serialization asp.net-web-api poco