2014-01-09 90 views
4

我有OnActionExecutingActionFilter其中我已检查用户会话是否已过期,并且在会话过期的情况下,用户必须重定向到登录页面服务器在发送http头之后无法设置状态

CompressFilterAttribute.cs文件具有代码,如下所示:

public override void OnActionExecuting(ActionExecutingContext FilterContext) 
{ 
    if (((((System.Web.Mvc.ControllerContext)(FilterContext)).HttpContext).Request).IsAuthenticated) 
      GZipEncodePage(); //Function to check Session Expiration Time 

      var action = (string)FilterContext.RouteData.Values["action"]; 

      if (!FilterContext.HttpContext.User.Identity.IsAuthenticated && 
       action != "Index" && 
       action != "FindStoreNameByText" && 
       action.ToLower() != "sessiontimeout" && 
       action.ToLower() != "logout") 
      { 
       string UrlSucesso = "/Home"; 
       string UrlRedirecionar = string.Format("?ReturnUrl={0}", UrlSucesso); 
       string UrlLogin = FormsAuthentication.LoginUrl + UrlRedirecionar; 
       FilterContext.HttpContext.Response.Redirect(UrlSucesso, true); 
      } 
    } 

CustomErrorHandleAttribute.cs文件具有代码,如下所示:

public override void OnException(ExceptionContext filterContext) 
{ 
    base.OnException(filterContext); 
    // Rest logic 
} 

CustomErrorHandleAttribute.cs文件我收到错误 - >服务器无法设置状态后http头hav e已发送

请帮我。

+1

可能重复[服务器无法设置状态后HTTP头已发送IIS7.5](http://stackoverflow.com/questions/2383169/server-cannot-set-status-after-http-headers-have-been-sent-iis7-5) – drzaus

回答

8

您的OnActionExecution方法发送必要的重定向http头,但它不会停止执行控制器代码。

我认为你应该使用以下重定向用户,而不是Response.Redirect的:

FilterContext.Result = new RedirectResult(url); 

又见这些堆栈溢出问题:

+0

感谢您的帮助,但我没有解决这个问题仍然是相同的错误反正我标记的答案是有用的,... – HarshSharma

+1

我仍然认为,出现的问题是因为CustomErrorHandleAttribute.cs尝试发送重定向头后已发生HTTP错误已经已发送到浏览器。您应该调试重定向后运行的代码以及存储在[ExceptionContext.Exception]中的确切异常(http://msdn.microsoft.com/zh-cn/library/system.web.mvc.exceptioncontext .exception(v = vs.118)的.aspx) – artokai

相关问题