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

如何在重写的OnActionExecuting方法中读取context.Result的状态码?

能否在OnActionExecuting中读取context.Result的状态码?

当然可以读取context.Result的状态值来做判断,但这里有个关键细节得提一下——在OnActionExecuting这个生命周期阶段,默认情况下context.Result是null,因为这个过滤器是在控制器方法执行前触发的,还没到生成响应结果的环节。

那什么时候context.Result会有值呢?比如如果有更早执行的过滤器(比如ASP.NET Core自带的授权过滤器)已经提前设置了响应结果(比如返回401的UnauthorizedResult),这时候你就能在OnActionExecuting里读取到它。

给你调整后的代码示例,两种判断方式都能用:

public override void OnActionExecuting(ActionExecutingContext context)
{
    base.OnActionExecuting(context);
    
    // 方式1:直接判断特定的Result类型(推荐,更精准)
    if (context.Result is UnauthorizedResult)
    {
        // 执行401对应的逻辑
        // 比如记录日志、返回自定义提示等
    }
    // 方式2:判断状态码(适用于自定义StatusCodeResult的场景)
    else if (context.Result is StatusCodeResult statusCodeResult 
             && statusCodeResult.StatusCode == StatusCodes.Status401Unauthorized)
    {
        // 同样处理401逻辑
    }
    else
    {
        // 请求未被拦截,执行你的校验操作或其他逻辑
    }
}

额外提醒两点:

  • 如果你的校验逻辑需要依赖授权结果,记得调整过滤器的执行顺序(通过设置[Filter]的Order属性),让这个过滤器在授权过滤器之后运行,这样才能确保拿到授权阶段设置的Result。
  • 优先用UnauthorizedResult类型判断会更可靠,因为有些自定义的结果可能也返回401状态码,但类型不是UnauthorizedResult,根据类型判断能避免误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:32:55