You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AspNet Core MVC中如何获取JSON默认内容类型?

获取ASP.NET Core MVC中默认JSON内容类型的方法

当然可以!完全不用硬编码这个值,ASP.NET Core早就为我们准备好了内置的方式来获取默认的JSON内容类型,下面给你两种常用的实现场景:

在控制器中直接获取

你可以通过注入 IOptions<MvcOptions> 来访问框架的配置,因为默认的JSON输出格式就是在 MvcOptions 的格式化器配置里定义的。

示例代码:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Formatters;
using Microsoft.Extensions.Options;

public class HomeController : Controller
{
    private readonly MvcOptions _mvcOptions;

    // 通过构造函数注入MvcOptions配置
    public HomeController(IOptions<MvcOptions> mvcOptions)
    {
        _mvcOptions = mvcOptions.Value;
    }

    public IActionResult GetDefaultJsonContentType()
    {
        // 找到系统默认的System.Text.Json输出格式化器
        var jsonFormatter = _mvcOptions.OutputFormatters.OfType<SystemTextJsonOutputFormatter>().FirstOrDefault();
        
        if (jsonFormatter != null)
        {
            // 获取第一个(默认的)支持的媒体类型
            var defaultContentType = jsonFormatter.SupportedMediaTypes.First().ToString();
            // 这里得到的就是你要的 "application/json; charset=utf-8"
            return Ok(defaultContentType);
        }

        return NotFound("未找到JSON输出格式化器");
    }
}

注意:如果你的项目使用的是Newtonsoft.Json(而非默认的System.Text.Json),只需要把 SystemTextJsonOutputFormatter 替换成 NewtonsoftJsonOutputFormatter 即可。

在服务类中获取

和控制器的思路一致,同样通过依赖注入获取 IOptions<MvcOptions> 来拿到配置值,适合在业务服务中复用这个逻辑:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Formatters;
using Microsoft.Extensions.Options;

public class JsonContentTypeHelper
{
    private readonly string _defaultJsonContentType;

    public JsonContentTypeHelper(IOptions<MvcOptions> mvcOptions)
    {
        var jsonFormatter = mvcOptions.Value.OutputFormatters.OfType<SystemTextJsonOutputFormatter>().FirstOrDefault();
        // 兜底设置默认值,防止格式化器找不到的极端情况
        _defaultJsonContentType = jsonFormatter?.SupportedMediaTypes.First().ToString() 
                                 ?? "application/json; charset=utf-8";
    }

    public string GetDefaultJsonContentType()
    {
        return _defaultJsonContentType;
    }
}

如果需要在项目中使用这个服务,记得在 Program.cs 里注册它:

builder.Services.AddScoped<JsonContentTypeHelper>();

额外提醒

  • 这种方式的好处是可维护性高:如果后续你在 Program.cs 中修改了JSON的默认内容类型(比如调整字符编码),通过这种方式获取的值会自动同步更新,不需要修改业务代码。
  • 如果项目配置了多个JSON格式化器,记得根据实际需求筛选对应的那个(比如区分System.Text.Json和Newtonsoft.Json的实现)。

内容的提问来源于stack exchange,提问作者stephan.peters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:59:17