发送http标头后,服务器无法设置状态

Har*_*rma 4 c# asp.net-mvc asp.net-mvc-4

我已经OnActionExecuting ActionFilter检查过用户会话是否已过期,如果会话过期,则必须将用户重定向到登录页面.

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);
            }
    }
Run Code Online (Sandbox Code Playgroud)

CustomErrorHandleAttribute.cs文件的代码如下所示:

public override void OnException(ExceptionContext filterContext)
{
    base.OnException(filterContext);
    // Rest logic
}
Run Code Online (Sandbox Code Playgroud)

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

请帮帮我.

art*_*kai 8

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

我认为您应该使用以下内容来重定向用户而不是Response.Redirect:

 FilterContext.Result = new RedirectResult(url); 
Run Code Online (Sandbox Code Playgroud)

另请参阅其他堆栈溢出问题: