Я хотел знать точно то же самое. Я искал в Google и наткнулся на ваш вопрос, а также на другие, и ответы кажутся одинаковыми. Используйте метод IActionFilter.OnActionExecuted
.
Однако на самом деле это не ответ, а скорее обходной путь, поскольку @ randy-load предлагает изменить / заменить результат действия RedirectToRouteResult в фильтре результатов. Так почему бы не результат действия RedirectRoute?
Если вы действительно хотите перенаправить на определенный URL-адрес в методе IResultFilter.OnResultExecuting
, то вы можете выполнить одно из следующих действий:
RedirectResult redirectResult = new RedirectResult("http://www.google.com");
filterContext.Result = redirectResult;
filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext);
filterContext.Cancel = true;
base.OnResultExecuting(filterContext);
Или
filterContext.HttpContext.Response.RedirectLocation = "http://www.google.com";
filterContext.HttpContext.Response.StatusCode = 302;
filterContext.Cancel = true;
base.OnResultExecuting(filterContext);
В первом варианте вы вручную выполняете RedirectResult и, выполняя filterContext.Cancel = true
, вы сообщаете фреймворку, что вам не требуется запуск filterContext.Result
. Во втором варианте вы, по сути, делаете то же самое, но вместо того, чтобы RedirectResult настраивал Http-ответ, вы делаете это самостоятельно.
В моем случае я хотел добавить дополнительный параметр запроса к URL-адресу перенаправления и сказать платформе, что хотел отменить результат действия перенаправления, а затем перенаправить в любом случае, казалось немного неправильным, но это работает.