Ядро ASP.NET OkObjectResult с XmlDocument игнорирует заголовок подтверждения - PullRequest
0 голосов
/ 26 мая 2018

Я вижу поведение ядра ASP.NET, которое просто не понимаю.Для воспроизведения:

Создайте новое приложение, используя шаблон API (сейчас его используют Microsoft.AspNetCore.All 2.0.8).

Измените контроллер значений следующим образом:

    [HttpGet]
    public IActionResult Get()
    {
        var xmlContent = new System.Xml.XmlDocument();
        xmlContent.LoadXml("<MyData><StringProperty>foo</StringProperty></MyData>");
        return new OkObjectResult(xmlContent);
    }

Выполнитьприложение и нажмите этот API с помощью accept: application / xml, например:

GET http://localhost:3287/api/values HTTP/1.1
User-Agent: Fiddler
Host: localhost:3287
Accept: application/xml

. Вы получите следующий результат:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Server: Kestrel
X-Powered-By: ASP.NET
Date: Fri, 25 May 2018 22:55:00 GMT
Content-Length: 35

{"MyData":{"StringProperty":"foo"}}

Клиент запросил XML с сервера, серверабыл результат XML, и все же возвратил JSON.

Мне известны различные обходные пути (например, использование ContentResult), но я хотел бы понять, является ли это ожидаемым поведением и если да, то почему?

1 Ответ

0 голосов
/ 29 мая 2018

Энди Бут указал мне ответ - XmlSerializerFormatters нужно добавить примерно так:

    public void ConfigureServices(IServiceCollection services)
    {
        services
            .AddMvc()
            .AddXmlSerializerFormatters();
    }

После этого я получаю ожидаемое поведение:

GET http://localhost:3287/api/values HTTP/1.1
User-Agent: Fiddler
Host: localhost:3287
Accept: application/xml

HTTP/1.1 200 OK
Content-Type: application/xml; charset=utf-8
Server: Kestrel
X-Powered-By: ASP.NET
Date: Tue, 29 May 2018 19:45:48 GMT
Content-Length: 53

<MyData><StringProperty>foo</StringProperty></MyData>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...