首页 > 解决方案 > 为什么 Ok() 方法返回 text/plain 媒体类型而不是 application/json?

问题描述

文档 ( https://docs.microsoft.com/en-us/aspnet/core/web-api/advanced/formatting?view=aspnetcore-3.1 ) 说使用该Ok()方法返回的结果默认格式化为 json。我认为这也意味着它以 application/json 的形式返回,但使用 fiddler 我发现这对我来说并非如此。

问题是,我正在返回一个已经格式化为 json 的字符串。那是问题吗?如何使其以 application/json 媒体类型返回?

编辑:

我刚刚读到 Ok() 在提供字符串时确实返回 text/plain 而不是 application/json,这使得它无法用于返回原始 json。答案似乎是回归Content(rawJson, "application/json")

这确实解决了我的问题,但现在我想知道是否有一种方法可以将媒体类型全局设置为始终为 json?如果不是,我想我可以创建一个带有处理它的方法的基本控制器类。

标签: c#asp.netasp.net-core-webapi

解决方案


您可以添加一个全局过滤器。在您的Startup.cs ConfigureServices方法中,定位services.AddControllers();并添加如下:

services.AddControllers(config => config.Filters.Add(new ProducesAttribute("application/json")));

现在,这减轻了在控制器级别添加它的需要。


推荐阅读