我想通过一个来自ASP.NET Core中间件的JsonResult
进行响应,但如何实现并不明显。我在Google上搜索了很多,但几乎没有成功。我可以通过将ActionExecutedContext.Result
设置为JsonResult
来从全局IActionFilter
通过JsonResult
进行响应,这很酷。但是在本例中,我希望从中间件有效地返回一个JsonResult
,这如何实现呢?
我提出了关于JsonResult
IActionResult
的问题,但理想情况下,该解决方案将适用于使用任何IActionResult
来编写来自中间件的响应。
4条答案
按热度按时间x7yiwoj41#
中间件是ASP.NET核心的一个非常底层的组件。(高效地)写出JSON是在MVC存储库中实现的。具体来说,是在JSON formatters组件中。
它基本上可以归结为在响应流上编写JSON,其最简单的形式可以在中间件中实现,如下所示:
ej83mcc02#
对于其他可能对如何从中间件返回
JsonResult
的输出感兴趣的人,下面是我想到的方法:这种方法允许一个中间件返回
JsonResult
的输出,并且这种方法几乎能够使中间件返回任何IActionResult.
的输出。为了处理更一般的情况,创建ActionDescriptor
的代码需要改进。但是,到此为止,我已经足够满足返回JsonResult
的输出的需要了。kpbwa7wx3#
正如@Henk Mollema所解释的,我还使用了Newtonsoft.Json JsonConvert类,通过SerializeObject方法将对象序列化为JSON。对于ASP.NET Core 3.1,我在Run方法中使用了JsonConvert。以下解决方案对我很有效:
Startup.cs
bvhaajcl4#
从ASP.NETCore5.0开始,您可以使用
WriteAsJsonAsync
将JSON写入响应流。此方法处理序列化并适当地设置内容类型标头。例如