Perché il mio actionfilterattribute reindirizza dopo il codice di azione è eseguito?
-
12-09-2020 - |
Domanda
Sto cercando di utilizzare un actionFilterAttribute per reindirizzare gli utenti che non sono registrati. Sebbene il mio reindirizzamento sia funzionante reindirizzamento, ma chiama prima tutto il mio codice AzioneResult.
Qualche idea sul motivo per cui non onora la bandiera vera e finisce la risposta?
HttpContext.Current.Response.Redirect("~/Logon",true);
.
Ecco il mio actionResult:
[RequireLoggedIn]
public ActionResult Create()
{
return View(_MessageService.GetAllMessageCategories());
}
.
Questo è il mio attributo:
public class RequireLoggedIn : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (Membership.GetUser() == null)
{
//Not logged in so back to the logon page.
HttpContext.Current.Response.Redirect("~/Logon",true);
HttpContext.Current.Response.End();
}
}
}
. Soluzione
È necessario impostare il filterContext.Result
in qualcosa di non nullo per evitare l'elaborazione a valle, altrimenti MVC non sa che tu abbia cortocircuito.L'approccio più semplice sarebbe solo:
public override void OnActionExecuting(ActionExecutingContext filterContext) {
if (Membership.GetUser() == null) {
filterContext.Result = new RedirectResult("~/Logon");
}
}
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow