在我的ASP.NET
项目中,所有WebApi
都回复了json
。因此,我在WebApiConfig.cs
中设置了
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
现在,我只需要更改一个webapi即可根据标头中的请求返回XML。
最佳做法是什么?有例子吗?
答案 0 :(得分:0)
config.Formatters.XmlFormatter.UseXmlSerializer = true;
然后同时进行xml和json序列化, 当您将请求的接受标头设置为“ application / xml,xml / text”时,您将获得xml,如果将标头设置为“ application / json,json / text”,则将获得json结果 它叫做content negotiation
另一种方法是使用特定方法将对象序列化为xml
答案 1 :(得分:0)
根据您的评论,我更新了WebApiConfig.cs
:
public static void Register(HttpConfiguration config)
{
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
config.Formatters.Add(new XmlMediaTypeFormatter());
config.Formatters.XmlFormatter.UseXmlSerializer = true;
}
然后在我想用XML
回复的webapi中
public HttpResponseMessage GetCollections(int Id)
{
List<CollectionDTO> result = _collectionsLogic.GetCollections(Id);
IContentNegotiator negotiator = this.Configuration.Services.GetContentNegotiator();
ContentNegotiationResult resultFormatted = negotiator.Negotiate(
typeof(List<CollectionDTO>), this.Request, this.Configuration.Formatters);
if (result == null)
{
var response = new HttpResponseMessage(HttpStatusCode.NotAcceptable);
throw new HttpResponseException(response);
}
return new HttpResponseMessage()
{
Content = new ObjectContent<List<CollectionDTO>>(
result,
resultFormatted.Formatter,
resultFormatted.MediaType.MediaType
)};
}
}
例如,如果我用Postman
调用此webapi,并在标头中插入Accept
等于application/xml
的标题,则将以XML
格式接收结果,否则以json