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();
       }
    }
}
.

È stato utile?

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
scroll top