为什么在操作和结果过滤器中无法访问 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。
我正在尝试编写一个操作或结果过滤器,如果状态代码 >= 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。