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

.NET Core 2.0:如何为ActionExecutingContext分配响应及返回406结果?

解决.NET Core 2.0 ActionFilter中返回406状态码的问题

嘿,我懂你现在的需求——给API做令牌授权的ActionFilter,碰到了返回406「不可接受」状态码的小困惑对吧?别担心,这事儿很好解决,咱们一步步来捋清楚:

1. 有没有对应406「不可接受」的结果类?

.NET Core里没有像NotFoundResult、BadRequestResult那样专门命名的NotAcceptableResult类,但完全可以用通用的结果类来实现。框架已经给咱们定义好了现成的状态码常量StatusCodes.Status406NotAcceptable,直接用它就行。

2. 如何在ActionExecutingContext中设置HTTP响应?

核心逻辑就是给context.Result赋值——一旦你设置了这个属性,ASP.NET Core就会跳过后续的Action执行流程,直接返回你指定的响应结果。

完整代码示例

我把你的AuthorizationRequiredAttribute补全,实现无权限时返回406的逻辑:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class AuthorizationRequiredAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        // 替换成你的实际令牌验证、权限检查逻辑
        bool hasValidPermission = false; 

        if (!hasValidPermission)
        {
            // 方式1:仅返回406状态码,无响应体
            context.Result = new StatusCodeResult(StatusCodes.Status406NotAcceptable);

            // 方式2:返回带自定义错误消息的406响应(适合给前端提示)
            // context.Result = new ObjectResult(new { 
            //     Message = "您没有访问该API的权限",
            //     Code = "PermissionDenied"
            // })
            // {
            //     StatusCode = StatusCodes.Status406NotAcceptable
            // };
        }

        base.OnActionExecuting(context);
    }
}

补充说明

  • 如果只需要返回纯状态码,用StatusCodeResult就足够简洁;如果要返回JSON格式的错误信息,用ObjectResult更合适,它会自动把你的对象序列化成响应体。
  • 记得把hasValidPermission替换成你真实的权限校验逻辑——比如解析请求头里的令牌、检查用户角色或权限标识等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:28:45