2014-01-09 113 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

相關問題