C# 在安装Polly进行重试后,HttpResponseMessage似乎被覆盖

C# 在安装Polly进行重试后,HttpResponseMessage似乎被覆盖,c#,azure,asp.net-web-api2,polly,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 StringConten

我们有一个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包,并在重试中添加,当在visualstudio中本地运行时,一切看起来都很好。一旦我们部署Azure,事情就糟了

在VisualStudio调试器中编译和运行localling时,我们期望得到一个带有简单文本字符串的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,一切都会恢复正常

我们能找到的唯一其他评论/问题如下:

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"));
    }    
    

    有关更多详细信息,您可以参考类似内容。

    正如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"));
    }    
    

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

    显示的JSON是
    HttpResponseMessage
    的序列化。部署的web应用程序很可能使用.net core,它不再将该对象识别为有效响应,而是将其转换为.net标准,因此库将针对目标平台的通用API。是HttpClient返回的响应。它没有实现IActionResult,因此它永远不能被转换为Web API响应,只能转换为有效负载。本地代码本来就不应该工作。显示的JSON是一个
    HttpResponseMessage
    的序列化。部署的web应用程序很可能使用.net core,它不再将该对象识别为有效响应,而是将其转换为.net标准,因此库将针对目标平台的通用API。是HttpClient返回的响应。它没有实现IActionResult,因此它永远不能被转换为Web API响应,只能转换为有效负载。本地代码本来就不应该起作用。试着将您的代码示例改编成他们最初问题中的代码片段。这不是ASP.net核心项目。它是.NETFramework 4.6.2。如前所述,这在本地运行良好,但在推送到Azure时失败。如果我混合使用web api版本或类似版本,我想我会在Azure上得到相同的结果。对不起,弄错了。但这也是同样的问题。您可以使用ActionResult返回数据。@DouglasAnderson HttpResponseMessage是HttpClient响应类,而不是Web API类。本地代码也不应该工作。请尝试将您的代码示例改编为原始问题中的代码段。这不是ASP.net核心项目。它是.NETFramework 4.6.2。如前所述,这在本地运行良好,但在推送到Azure时失败。如果我混合使用web api版本或类似版本,我想我会在Azure上得到相同的结果。对不起,弄错了。但这也是同样的问题。您可以使用ActionResult返回数据。@DouglasAnderson HttpResponseMessage是HttpClient响应类,而不是Web API类。本地代码也不应该起作用。