我的应用程序控制器中有一个OnActionExecuted,用于检查用户是否仍然登录。当用户不再登录时,会话需要被销毁并重定向回主页而无需转到新页面。 (因此必须取消当前的请求。)
这是我的代码:
if (System.Web.HttpContext.Current.Session.IsNewSession)
{
if (System.Web.HttpContext.Current.Session["Userid"] != null)
{
// Check userid session
filterContext.Controller.TempData["sessionError"] = 1;
System.Web.HttpContext.Current.Session.RemoveAll();
System.Web.HttpContext.Current.Response.BufferOutput = true;
System.Web.HttpContext.Current.Response.Flush();
RedirectToAction("Index", "Home");
return;
}
}
然而,我在这段代码中遇到的问题是它给了我一个例外:
Message:
Server cannot modify cookies after HTTP headers have been sent.
Source:
at System.Web.HttpResponse.BeforeCookieCollectionChange()
at System.Web.HttpCookieCollection.Add(HttpCookie cookie)
at Topsite.Classes.GlobalFunctions.SetCookie(String name, String value, DateTime endDate)
at Topsite.Controllers.ApplicationController.OnActionExecuted(ActionExecutedContext filterContext)
at System.Web.Mvc.Controller.System.Web.Mvc.IActionFilter.OnActionExecuted(ActionExecutedContext filterContext)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult)
有什么建议吗?
我确实发现了其他一些有同样问题的问题,我跟着他们但仍然收到了例外。这就是我寻求帮助的原因。
答案 0 :(得分:2)
在OnActionExecuted上这样做太晚了。 您应该考虑使用OnActionExecuting。 http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.onactionexecuting(v=vs.118).aspx