2016-09-28 1 views
1

Ich verwende den folgenden ActionFilter, um zu überprüfen, ob eine Sitzungsvariable verloren gegangen ist, wenn sie zum 'Select a warehouse code' Bildschirm weitergeleitet werden ... So weit der Benutzer ist besorgt, es funktioniert gut ... aber ELMAH meldet einen Fehler (siehe unten Code) jedes Mal, wenn ich über den ActionFilter umleiten.ActionFilter - Kann nicht umleiten, nachdem HTTP-Header gesendet wurden

P.S. Dieses ActionFilter-Attribut wird dann auf einen Basiscontroller gesetzt, den alle anderen Controller erben.

P.P.S. Es gibt keine weitere Weiterleitung ... dieser Aktionsfilter feuert vor der Aktion, die er versucht hat auszuführen ... Ich kann nicht für das Leben von mir herausfinden, warum ich diesen Fehler immer wieder bekomme.

public class HasWarehouseCodeExpired : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     Controller controller = filterContext.Controller as Controller; 

     if (controller != null) 
     { 
      if (SessionHelper.WarehouseCode == null) 
      { 
       filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "logon", action = "displaywarehouseselection", area = string.Empty })); 
      } 
     } 

     base.OnActionExecuting(filterContext); 
    } 
} 

Der Fehler:

System.Web.HttpException (0x80004005): Cannot redirect after HTTP headers have been sent. at System.Web.HttpResponse.Redirect(String url, Boolean endResponse, Boolean permanent) at System.Web.HttpResponseWrapper.Redirect(String url, Boolean endResponse) at System.Web.Mvc.RedirectToRouteResult.ExecuteResult(ControllerContext context) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)

Antwort

0

Nun, ich weiß noch nicht, warum der Fehler auftritt, aber ich den Fehler durch Zugabe von:

filterContext.HttpContext.Server.ClearError();

Wie so:

if (SessionHelper.WarehouseCode == null) 
{ 
    filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "logon", action = "displaywarehouseselection", area = string.Empty })); 
    filterContext.HttpContext.Server.ClearError(); 
} 
Verwandte Themen