chciałem wiedzieć dokładnie to samo. Szukałem google i natknąłem się na twoje pytanie plus inne, a wszystkie odpowiedzi wyglądają tak samo. Użyj metody IActionFilter.OnActionExecuted
.
Jednak to nie jest odpowiedź, ale raczej praca, ponieważ @ randy-load sugeruje, że możesz zmodyfikować/zastąpić wynik działania RedirectToRouteResult w filtrze wyników. Dlaczego więc nie można uzyskać akcji RedirectRoute?
Jeśli naprawdę chcesz redirct do określonego adresu URL wewnątrz metody IResultFilter.OnResultExecuting
następnie można wykonać jedną z następujących czynności:
RedirectResult redirectResult = new RedirectResult("http://www.google.com");
filterContext.Result = redirectResult;
filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext);
filterContext.Cancel = true;
base.OnResultExecuting(filterContext);
Or
filterContext.HttpContext.Response.RedirectLocation = "http://www.google.com";
filterContext.HttpContext.Response.StatusCode = 302;
filterContext.Cancel = true;
base.OnResultExecuting(filterContext);
W pierwszej opcji, są ręcznie wykonując RedirectResult i wykonując filterContext.Cancel = true
, mówisz frameworkowi, że nie musisz uruchamiać filterContext.Result
. W drugiej opcji zasadniczo robisz to samo, ale zamiast tego, że RedirectResult konfiguruje odpowiedź Http, robisz to sam.
W moim przypadku chciałem dołączyć dodatkowy parametr zapytania do adresu URL przekierowania i powiedzieć ramce, dla której chciałem anulować wynik działania przekierowania, a następnie przekierowanie mimo wszystko wydawało się trochę złe, ale działa.