После установки Polly для повторных попыток HttpResponseMessage оказывается переопределенным - PullRequest
0 голосов
/ 08 октября 2018

У нас есть приложение ASP.NET Web API 2, которое использует HttpResponseMessage в качестве контроллера возвращаемого значения из-за нашей потребности в отправке прямого текста.Наш код выглядит примерно так:

public HttpResponseMessage Submit(string data)
{
    ...do some sutff...
    return new HttpResponseMessage(HttpStatusCode.OK)
    {
        Content = new StringContent("Success", System.Text.Encoding.UTF8, "text/plain")
    };
}

Все отлично работает.В другой области кодовой базы есть набор методов, которые требуют повторных попыток, мы установили пакет nuget Polly, добавили в повтор, и все выглядит великолепно при локальном запуске в Visual Studio.Как только мы развернем Azure, все пойдет плохо.

При компиляции и запуске локализации в отладчике Visual Studio мы ожидаем и получаем ответ 200 с простой текстовой строкой.Эта проблема возникает при развертывании в веб-приложении Azure.Как только мы сделаем это, наши вызовы API возвращают следующее:

{
"Version": {
    "_Major": 1,
    "_Minor": 1,
    "_Build": -1,
    "_Revision": -1
},
"Content": {
    "Headers": [
        {
            "Key": "Content-Type",
            "Value": [
                "text/plain; charset=utf-8"
            ]
        }
    ]
},
"StatusCode": 200,
"ReasonPhrase": "OK",
"Headers": [],
"RequestMessage": null,
    "IsSuccessStatusCode": true
}

Если мы удалим Polly, все вернется в норму.

Единственный другой комментарий / вопрос, который мы могли бы выяснитьбыло следующее: Веб-API возвращал объект HttpResponseMessage после обновлений nuget в Azure Web App

2 Вопросы:

  1. Каков ответ выше?Моего контента там нет, и я никогда не видел этого раньше.
  2. Есть ли в Полли что-то, что я пропустил в плане конфигурации и т. Д., Что могло бы вызвать это?

1 Ответ

0 голосов
/ 08 октября 2018

Как сказал Нкоси, это ASP.net-Core, тогда вы смешиваете версии веб-API, а на стороне сервера Asp.Net Core больше не использует HttpResponseMessage.

Вам необходимо использовать соответствующий результат действия для возврата желаемых данных, таких как ActionResult .

[HttpGet("{id}"]
public ActionResult Submit(string data) {

    //...do some stuff...

    //returns 200 with the content and specified media type for the content
    return Content("Success", new MediaTypeHeaderValue("text/plain"));
}    

Для получения более подробной информации вы можете обратиться к этому аналогу вопрос .

...