I'm trying to setup an action filter that only does something if the StatusCode
of the HttpContext.Response
is 302.
I would expect to be able to do this in the OnActionExecuting
method, but the StatusCode
is always 200
.
ActionFilter
code:
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
}
}
}
My Action
method:
public IActionResult Redirect()
{
return RedirectToAction("Index", "Home");
}
And registering the ActionFilter
in startup
:
public void ConfigureServices(
IServiceCollection services)
{
services.AddMvc(
options =>
{
options.Filters.Add(new CustomFilter());
});
}
I have checked in the browser and it is correctly returning 302 and doing the redirect. I have also tried using the IAsyncActionFilter
interface but had the same problem.
How can I apply my ActionFilter
to (only) a redirected response?
And why is this not working as is?
EDIT: Whoops I had them the wrong way round. Actually I am still getting this issue though...
You can attempt to convert your ActionExecutedContext.Result
object to ObjectResult
and retrieve StatusCode
from it.
public void OnActionExecuted(ActionExecutedContext context)
{
var statusCode = (context.Result as ObjectResult)?.StatusCode
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With