gpt4 book ai didi

c# - ActionFilter Response.StatusCode 始终为 200

转载 作者:行者123 更新时间:2023-11-30 19:53:11 34 4
gpt4 key购买 nike

我正在尝试设置一个 Action 过滤器,它只在 HttpContext.ResponseStatusCode 为 302 时才执行某些操作。

我希望能够在 OnActionExecuting 方法中执行此操作,但 StatusCode 始终为 200

ActionFilter代码:

public class CustomFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
// do some setup
}

public void OnActionExecuted(ActionExecutedContext context)
{
if (context.HttpContext.Response.StatusCode == StatusCodes.Status302Found)
{
// never get here
}
}
}

我的Action方法:

public IActionResult Redirect()
{
return RedirectToAction("Index", "Home");
}

并在startup中注册ActionFilter:

public void ConfigureServices(
IServiceCollection services)
{
services.AddMvc(
options =>
{
options.Filters.Add(new CustomFilter());
});
}

我已经检查了浏览器,它正确地返回了 302 并进行了重定向。我也尝试过使用 IAsyncActionFilter 接口(interface),但遇到了同样的问题。

如何将我的 ActionFilter 应用于()重定向的响应?

为什么这不能正常工作?

编辑:糟糕,我弄错了。其实我仍然遇到这个问题......

最佳答案

在实际生成响应之前,您正在查看响应的状态代码。 OnActionExecutingcalled before该操作已执行,因此尚未设置状态代码。 Default value状态代码为 200,这就是您所看到的。

为了能够看到其他操作分配给响应的实际状态代码,您需要查看 OnActionExecutedruns after行动。

更新。

另一个问题可能是在核心框架中, Action 过滤器在 Action 执行之前和之后运行。所以响应还没有被处理,状态码也没有在http响应对象中设置。

适用于您的用例的正确方法 seems to be IResultFilter.OnResultExecuted

关于c# - ActionFilter Response.StatusCode 始终为 200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50463634/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com