【发布时间】:2017-04-06 13:03:18
【问题描述】:
我需要返回一个一致的响应,所有请求都返回一个类似的结构。在之前的 .NET web api 中,我可以使用 DelegatingHandler (MessageHandlers) 来实现这一点。我要返回的对象将被封装在 Result 元素中。所以基本上json响应会是这样的结构:
示例 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 核心中,看起来我需要通过中间件来执行此操作。我试过了,但是当您可以调用 HttpResponseMessage.TryGetContentValue 来获取内容并将其包装在全局/通用响应模型中时,我没有看到更好的方法来提取内容,就像在以前的 Web API 中那样。
如何在 .NET core 中实现同样的功能?
【问题讨论】:
-
是的,中间件是一个控制点。您需要缓冲正文,重新解析它,更新它,然后发送结果。 MVC 还可能具有响应过滤器,可让您在序列化之前更改操作结果。
-
您在项目中使用什么架构?如果您有 n 层逻辑,则不必将对象包装在 Web 项目中,您可以在业务层或此类层中执行此操作。如果您想在执行操作后包装您的结果,那么中间件是一个选项,我不知道其他任何东西。
-
@kizilsu 在n层架构中,业务层包含丰富的领域模型。因此在 api 层中,它需要映射到您想要公开给 api 的“哑”/view/dto 模型。映射后需要设置为一致响应模型中的Result属性/字段。
标签: c# asp.net-core asp.net-core-mvc