我们有一个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个问题:
答案 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。