Napisałem filtr działania, który wykrywa nową sesję i próbuje przekierować użytkownika na stronę informującą, że tak się stało. Jedyny problem polega na tym, że nie mogę znaleźć sposobu przekierowania do kontrolera/kombi akcji w filtrze akcji. Mogę zamiast tego tylko dowiedzieć się, jak przekierować do określonego adresu URL. Czy istnieje bezpośredni sposób przekierowania do kontrolera/kombi akcji w filtrze akcji w mvc2?Przekierowanie do określonego kontrolera i akcji w asp.netowym filtrze akcji mvc
Odpowiedz
Zamiast się odniesienie do HttpContent i przekierowanie bezpośrednio w ActionFilter można ustawić wynik kontekście filtra być RedirectToRouteResult. Jest nieco czystszy i lepszy do testowania.
Jak to:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(something)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary {{ "Controller", "YourController" },
{ "Action", "YourAction" } });
}
base.OnActionExecuting(filterContext);
}
połączeń RedirectToAction użyciu this overload:
protected internal RedirectToRouteResult RedirectToAction(
string actionName,
RouteValueDictionary routeValues
)
w filtrach akcji, historia jest nieco inna. Na dobry przykład, patrz tutaj:
http://www.dotnetspider.com/resources/29440-ASP-NET-MVC-Action-filters.aspx
To dobre miejsce, aby spojrzeć na przekierowanie w filtrze działania (+1), ale naprawdę chcę określić combo kontroler/działania do mojego filtra. Nie chciałem też łączyć łańcuchów w przypadku niestandardowego routingu, ale znalazłem coś, co mogłoby pomóc. Zobacz moją odpowiedź. –
EDIT: Oryginalny pytanie było o tym, jak wykryć sesji wylogowanie, a następnie automatycznie przekierować do określonego kontrolera i akcji. Pytanie okazało się jednak znacznie bardziej użyteczne w obecnej formie.
Skończyłem z wykorzystaniem kombinacji przedmiotów, aby osiągnąć ten cel.
Najpierw jest ustawiony filtr wygasania sesji here. Potem chciałem w jakiś sposób określić kombinację kontrolera/akcji, aby uzyskać przekierowanie, które znalazłem wiele przykładów here. W końcu wpadłem na to:
public class SessionExpireFilterAttribute : ActionFilterAttribute
{
public String RedirectController { get; set; }
public String RedirectAction { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext ctx = HttpContext.Current;
if (ctx.Session != null)
{
if (ctx.Session.IsNewSession)
{
string sessionCookie = ctx.Request.Headers["Cookie"];
if ((null != sessionCookie) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0))
{
UrlHelper helper = new UrlHelper(filterContext.RequestContext);
String url = helper.Action(this.RedirectAction, this.RedirectController);
ctx.Response.Redirect(url);
}
}
}
base.OnActionExecuting(filterContext);
}
}
Jeśli chcesz uczynić to bardziej testowalnym, wierzę, że możesz po prostu ustawić filterContext.Result na RedirectResult, zamiast jawnie przekierowywać. Wynik netto jest taki, że MVC nadal wykonuje przekierowanie, ale w ten sposób można napisać testy jednostkowe, które ręcznie wywołują funkcję OnActionExecuting(), a następnie działają przeciwko filtreContext.Result. –
- 1. Przekierowanie na zewnętrzny URL z akcji kontrolera w Spring MVC
- 2. ASP.NET MVC 3 - przekierowanie do innej akcji
- 3. Przekierowanie nieautoryzowanego kontrolera w ASP.NET MVC
- 4. Przekierowanie z akcji jednego obszaru do akcji w "root" - czy to prawda?
- 5. Jak przekierować CakePHP do innej akcji/kontrolera?
- 6. wysłać e-maila do kontrolera akcji Symfony2
- 7. Używanie jQuery do wywoływania akcji kontrolera
- 8. Szyny: Skierowanie do niestandardowej akcji kontrolera
- 9. Jak dołączyć istniejący widok do akcji kontrolera?
- 10. Render akcji kontrolera z innego kontrolera
- 11. Czy można wyłączyć autoryzację dla jednej akcji w kontrolerze MVC?
- 12. C# mvc 3, przeciążanie akcji?
- 13. Wymuś działanie filtru dla wszystkich akcji kontrolera (C#/ASP.NET MVC)
- 14. ASP.NET MVC: Zarejestruj filtr akcji bez modyfikowania kontrolera
- 15. ASP.NET MVC 4 Trasy - kontroler/id vs kontrolera/akcji/id
- 16. Wywołanie akcji kontrolera z widoku w Ember
- 17. Uboczny querystrings do RedirectToRouteResult (obok kontrolera i akcji)
- 18. dodaj parametry/wartości ciągu zapytania w filtrze akcji. C# mvc3
- 19. Używanie Miniprofilatora MVC do każdego wywołania akcji
- 20. Przekieruj do akcji z innej akcji
- 21. ASP.NET MVC - Pobierz bieżący kontroler i nazwę akcji w pomocniku
- 22. Ręcznie pakiet i minify JS od akcji kontrolera
- 23. Zapobieganie ujawnianiu metody kontrolera Grails jako akcji
- 24. Jak dodać trasę MVC do określonego kontrolera?
- 25. Jak uzyskać nazwę kontrolera i akcji w programie OnActionExecuting?
- 26. Automatyczne generowanie akcji w kontrolerze MVC
- 27. Jak przetestować filtry akcji w ASP.NET MVC?
- 28. Jak uzyskać nazwę akcji z kontrolera podstawowego?
- 29. Wyjątek wskaźnika Null w korzystaniu z dostawcy akcji akcji akcji akcji
- 30. Uzyskaj parametry akcji i działania w Controller.OnException
Moja głowa bolała, a teraz nie. Dzięki – jolySoft
To jest znacznie bardziej odpowiednia odpowiedź niż moja. To było moje pierwsze pytanie na temat MVC i dzisiaj odpowiem na to w ten sposób. –