.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
相关产品推荐
相关产品推荐

