Я не могу получить голые кости Проект Asp.Net Core Web Api для работы с использованием Xml вместо Json. Пожалуйста помоги!Xml Запросы не работают
Я создал новый проект и только изменения в конфигурации по умолчанию должны были добавить 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());
});
}
My Controller также содержит простые 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"
});
}
}
Когда я пытаюсь вызвать метод POST
с помощью Content-Type: application/xml
, API возвращает 415 Unsupported Media Type. Я попытался добавить атрибут Consumes("application/xml")
к контроллеру, но он все равно не работает.
GET работает и возвращает JSON. Однако, если я добавлю атрибут Produces("application/xml")
к контроллеру, GET возвращает 406 Not Acceptable, даже если я предоставляю заголовок Accepts: application/xml
.
По какой-то причине API полностью отвергает все, что связано с xml, хотя добавлены форматы ввода и вывода, как я видел в очень немногих примерах, которые я мог найти.
Что мне не хватает?
Если это не работает с XML по умолчанию, без необходимости добавлять что-либо? – Mfusiki
Нет, по умолчанию ядро Asp.Net включает только Json Formatters. Должны быть явно добавлены Xml Formatters. За исключением того, что они не работают, очевидно ... – frangelico87
@ frangelico87 Вы пытались установить 'config.RespectBrowserAcceptHeader = true;'. Согласно этой статье (https://wildermuth.com/2016/03/16/Content_Negotiation_in_ASP_NET_Core) это необходимо. –