安装用于重试的Polly后,HttpResponseMessage似乎已被覆盖

时间:2018-10-07 21:37:20

标签: c# azure asp.net-web-api2 polly

我们有一个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")
    };
}

一切正常。在代码库的另一个区域中,有一组需要重试的方法,我们安装了Polly nuget程序包,在重试中添加了程序包,在Visual Studio中本地运行时,一切看起来都很不错。一旦我们部署Azure,事情就会变糟。

在Visual Studio调试器中编译和运行本地化时,我们期望使用简单的文本字符串获得200响应。部署到Azure Web应用程序时会出现此问题。完成此操作后,所有对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,一切都会恢复正常。

我们可以发现的唯一其他评论/问题是:Web API returning HttpResponseMessage object after nuget updates in Azure Web App

2个问题:

  1. 上面的回答是什么?我的内容不存在,我以前从未见过。
  2. 在Polly中是否存在我在配置等方面缺少的东西,可能会导致这种情况?

1 个答案:

答案 0 :(得分:2)

正如Nkosi所说,这是ASP.net-Core,那么您正在混合使用Web 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"));
}    

有关更多详细信息,您可以参考类似的issue