我需要返回一个与所有请求返回类似结构的一致响应。在以前的.NET web api中,我使用DelegatingHandler(MessageHandlers)实现了这一点。我想要返回的对象将封装在Result元素中。所以基本上JSON响应会在这种结构:如何包装Web API响应(在.net核心中)以保持一致性?
例1:
{
"RequestId":"some-guid-abcd-1234",
"StatusCode":200,
"Result":
{
"Id":42,
"Todo":"Do Hello World"
}
}
例2:
{
"RequestId":"some-guid-abcd-1235",
"StatusCode":200,
"Result":
{
[
{
"Id":42,
"Todo":"Print Hello World"
},
{
"Id":43,
"Todo":"Print Thank you"
}
]
}
}
在.NET中的核心,它看起来像我需要这样做通过中间件。我尝试过,但我没有看到一种更好的方式来提取内容,比如在以前的Web API中如何调用HttpResponseMessage.TryGetContentValue
来获取内容并将其包含在全局/通用响应模型中。
如何在.NET核心中实现相同?
是,中间件是一个控制点进行注册。您需要缓冲正文,重新解析它,更新它并发送结果。 MVC也可能有响应过滤器,可以在序列化之前更改动作结果。 – Tratcher
你在你的项目中使用什么架构?如果你有n层逻辑,你不必将自己的对象包装到你的web项目中,你可以在业务层或者层上做到这一点。如果你想在执行动作后包装你的结果,那么中间件是一种选择,我什么都不知道。 – kizilsu
@kizilsu在n层架构中,业务层包含丰富的域模型。所以在api层,它需要映射到你想暴露给你的api的“dumb”/ view/dto模型。在映射之后,需要将其设置为一致性响应模型中的Result属性/字段。 – alltej