【发布时间】:2023-03-25 04:38:01
【问题描述】:
我无法让一个简单的 Asp.Net Core Web Api 项目使用 Xml 而不是 Json 工作。请帮忙!
我创建了一个新项目,对默认配置的唯一调整是添加 Xml 格式化程序...
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc(config =>
{
config.InputFormatters.Add(new XmlSerializerInputFormatter());
config.OutputFormatters.Add(new XmlSerializerOutputFormatter());
});
}
我的控制器还包含简单的 Get 和 Post 方法:
[Route("api")]
public class MessageController : Controller
{
[HttpPost]
public void Post([FromBody] Message message)
{
}
[HttpGet]
public IActionResult Get()
{
return Ok(new Message
{
TestProperty = "Test value"
});
}
}
当我尝试使用 Content-Type: application/xml 调用 POST 方法时,API 返回 415 Unsupported Media Type。我已经尝试将Consumes("application/xml") 属性添加到控制器,但它仍然不起作用。
GET 工作并返回 JSON。但是,如果我将 Produces("application/xml") 属性添加到控制器,即使我提供了 Accepts: application/xml 标头,GET 也会返回 406 Not Acceptable。
由于某种原因,API 完全拒绝与 xml 相关的任何内容,即使添加了输入和输出格式化程序,正如我在我能找到的极少数示例中看到的那样。
我错过了什么?
【问题讨论】:
-
这不应该默认使用 XML 而无需添加任何东西吗?
-
否,默认情况下 Asp.Net 核心仅包含 Json 格式化程序。需要显式添加 Xml 格式化程序。除了它们显然不起作用......
-
@frangelico87 您是否尝试设置
config.RespectBrowserAcceptHeader = true;。根据这篇文章(wildermuth.com/2016/03/16/Content_Negotiation_in_ASP_NET_Core) 是需要的。 -
是的。据我了解,这只需要指定响应格式。无论哪种方式,是的,我已经尝试过了,但它也不起作用。
-
@frangelico87 对于输入格式化程序官方文档说使用
services.AddMvc() .AddXmlSerializerFormatters();。见docs.asp.net/en/latest/mvc/models/…
标签: c# asp.net-core asp.net-core-webapi