为什么在操作和结果过滤器中无法访问 context.Result.StatusCode?

Why is there no access to context.Result.StatusCode in Action and Result filters?

我正在尝试编写一个操作或结果过滤器,如果状态代码 >= 400,它会自动执行某些操作。ActionExecutedContext.Result 属性 看起来应该提供对状态代码的访问:

但是访问不到状态码:

这是设计使然吗?获取实际状态代码的最佳方式是什么?

此时,IActionResult 尚未执行,因此状态代码可能会发生变化。 基本上有了这个问题的答案:制作一个中间件并让它检查状态码。

在这种情况下,您应该查看响应状态代码。

var statusCode = context.HttpContext.Response.StatusCode;

这是我刚刚进行的测试,它正在运行:

    public void OnActionExecuted(ActionExecutedContext context)
    {
        var statusCode = context.HttpContext.Response.StatusCode;

        if (statusCode == StatusCodes.Status400BadRequest)
        {
            //DO SOMETHING
        }
    }

在OnActionExecuted上应该已经有了结果,但是你需要的好像是OnResultExecuted。