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

如何配置.NET 6的ASP.NET Core Web API仅接受application/json?

配置.NET 6 ASP.NET Core Web API仅接受application/json作为Accept请求头

你可以通过两种常用方式实现这个需求:

方法一:自定义中间件

在请求进入MVC管道前直接检查Accept头,不符合要求则返回406状态码。在Program.cs中添加以下代码,注意要放在路由和端点配置之前:

// 自定义Accept头检查中间件
app.Use(async (context, next) =>
{
    var acceptHeader = context.Request.Headers.Accept.ToString();
    // 若需要严格要求必须携带Accept头且值为application/json,可去掉!string.IsNullOrEmpty(acceptHeader)的判断
    if (!string.IsNullOrEmpty(acceptHeader) && !acceptHeader.Equals("application/json", StringComparison.OrdinalIgnoreCase))
    {
        context.Response.StatusCode = StatusCodes.Status406NotAcceptable;
        await context.Response.WriteAsync("仅接受application/json作为Accept请求头的值");
        return;
    }
    await next();
});

// 后续的路由、授权、端点配置
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});

方法二:全局Action过滤器

创建一个自定义过滤器,然后全局注册到MVC配置中,这样所有控制器都会生效:

1. 创建过滤器类

public class AcceptHeaderValidationFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        var acceptHeader = context.HttpContext.Request.Headers.Accept.ToString();
        // 同样可根据需求调整是否允许无Accept头的情况
        if (!string.IsNullOrEmpty(acceptHeader) && !acceptHeader.Equals("application/json", StringComparison.OrdinalIgnoreCase))
        {
            context.Result = new StatusCodeResult(StatusCodes.Status406NotAcceptable);
        }
        base.OnActionExecuting(context);
    }
}

2. 全局注册过滤器

在Program.cs的MVC服务配置中添加过滤器:

builder.Services.AddControllers(options =>
{
    options.Filters.Add<AcceptHeaderValidationFilter>();
});

如果只需要对特定控制器或接口生效,也可以在对应控制器/Action上标记[AcceptHeaderValidationFilter]。


内容的提问来源于stack exchange,提问作者tRuEsAtM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:33:35