C# 为什么无法访问操作中的context.Result.StatusCode和结果筛选器?

C# 为什么无法访问操作中的context.Result.StatusCode和结果筛选器?,c#,.net-core,action-filter,C#,.net Core,Action Filter,我正在尝试编写一个操作或结果过滤器,如果状态代码>=400,它会自动执行某些操作。ActionExecuteContext.Result属性似乎应该提供对状态代码的访问: 但无法访问状态代码: 这是故意的吗?获取实际状态代码的最佳方法是什么?此时,IActionResult尚未执行,因此状态代码可能会发生更改。基本上可以解决这个问题:制作一个中间件,让它检查状态代码。在这种情况下,您应该查看响应状态代码 var statusCode=context.HttpContext.Response.

我正在尝试编写一个操作或结果过滤器,如果状态代码>=400,它会自动执行某些操作。ActionExecuteContext.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。

记住,调试器会向您显示有关对象的具体运行时类型的详细信息。编译器希望您从声明的类型开始工作。这些并不总是相同的。因此,
IActionResult
不一定有
StatusCode
属性,而
BadRequestResult
实例则有。这是asp.net核心吗?原来我的答案中有点假设核心。这能回答你的问题吗?我最不想做的事情就是用一堆if语句来处理不同的具体结果类型。另外,
context.HttpContext.Response.StatusCode
始终为200,这是默认的http响应状态。