jag*_*jag 2 c# asp.net-core-mvc
我正在尝试设置一个动作过滤器,只有StatusCode在HttpContext.Response302 的情况下才会执行某些操作.
我希望能够在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
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的Action方法:
public IActionResult Redirect()
{
return RedirectToAction("Index", "Home");
}
Run Code Online (Sandbox Code Playgroud)
和注册ActionFilter在startup:
public void ConfigureServices(
IServiceCollection services)
{
services.AddMvc(
options =>
{
options.Filters.Add(new CustomFilter());
});
}
Run Code Online (Sandbox Code Playgroud)
我已经检查了浏览器,它正确返回302并进行重定向.我也试过使用IAsyncActionFilter界面,但有同样的问题.
如何ActionFilter将(仅)重定向的响应应用于?
为什么这不起作用?
编辑:哎呀我把他们弄错了.实际上我仍然得到这个问题...
您可以尝试将ActionExecutedContext.Result对象转换为对象ObjectResult并StatusCode从中检索对象。
public void OnActionExecuted(ActionExecutedContext context)
{
var statusCode = (context.Result as ObjectResult)?.StatusCode
}
Run Code Online (Sandbox Code Playgroud)