【发布时间】:2020-09-01 09:08:39
【问题描述】:
我正在使用 ASP.NET Core 2.1 中的中间件创建一个代理,它使第 3 方 API(OData 端点)调用
- 获取数据
- 做一些改变
- 向 Response.Body 发送响应
我参考了here
下面是代码 sn-p,无论我从 API 获得什么响应,它都能正常工作,我将进一步发送它
using (var responseMessage = await _httpClient.SendAsync(targetRequestMessage, HttpCompletionOption.ResponseHeadersRead, context.RequestAborted))
{
context.Response.StatusCode = (int)responseMessage.StatusCode;
CopyFromTargetResponseHeaders(context, responseMessage);
await responseMessage.Content.CopyToAsync(context.Response.Body);
}
但是,如果我在这里修改响应,例如,像这样,它就不起作用并且它显示空白页面而没有任何错误。
using (var responseMessage = await _httpClient.SendAsync(targetRequestMessage, HttpCompletionOption.ResponseHeadersRead, context.RequestAborted))
{
context.Response.StatusCode = (int)responseMessage.StatusCode;
CopyFromTargetResponseHeaders(context, responseMessage);
var output = new StringContent("some sample string or may be JSON", Encoding.UTF8, "application/json");
await output.CopyToAsync(context.Response.Body);
}
看起来我们不允许对从 API 调用收到的响应进行任何更改。谁能告诉我如何将修改后的内容发送回 Response.Body?
【问题讨论】:
-
我无法使用example 和您对响应的修改来重现您的问题。
-
很奇怪,我在浏览器上看到我的回复为空白,Chrome 显示“无法获得任何回复”。
-
在我的例子中,响应以 JSON 格式出现。对于 text/html,它可以工作,但不适用于 application/json。在您的工作示例中,如果响应的内容类型不是“文本”或“Javascript”,您将按原样返回响应。
标签: asp.net-core odata asp.net-core-webapi