0

我们有一个 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,一切都会恢复正常。

我们可以找到的唯一其他评论/问题如下:在 Azure Web App 中的 nuget 更新后 Web API 返回 HttpResponseMessage 对象

2个问题:

  1. 上面的反应是什么?我的内容不存在,我以前从未见过。
  2. Polly 中是否有一些我在配置等方面遗漏的东西可能会导致这种情况?
4

1 回答 1

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

有关更多详细信息,您可以参考这个类似的问题

于 2018-10-08T06:54:44.303 回答