我正在编写Api网关并实现我们需要的自定义聚合器。为此,我通过中间件接收任何传入的HTTP请求,询问该请求以查看这是否是我需要处理的请求,如果是,则对不同的api进行多个下游调用以获取需要重新组装的片段一起做出回应。如果不是我要处理的对象,则将其转发到下游系统(例如,像反向代理一样),因此我不会仅通过中间件拦截来实现Web api控制器。
在.net core 2.x中,我将使用诸如originalIncomingRequest.CreateResponse之类的方法在所有聚合调用完成后创建我的自定义响应,然后将我缝合在一起的json响应写入响应主体。
.net core 3.x中似乎不存在这种扩展方法
看起来像我这样(例如)
var json = JsonConvert.SerializeObject(aggregation);
var b = Encoding.UTF8.GetBytes(json);
originalIncomingRequest.HttpContext.Response.StatusCode = 200;
await request.HttpContext.Response.Body.WriteAsync(b, 0, b.Length);
但这是很久以前的一种模式。....net core 3.x中是否有更简单的方法来实现此目标?
答案 0 :(得分:0)
如果您想将此代码用作中间件,则应尝试以下代码:
app.Use(async (context, next) =>
{
var json = JsonConvert.SerializeObject(<aggregation>);
var b = Encoding.UTF8.GetBytes(json);
context.Response.StatusCode = 200;
await context.Response.Body.WriteAsync(b, 0, b.Length);
});