在MVC3应用程序中检查cookie的位置?

mar*_*ith 3 c# cookies asp.net-mvc

我有一个MVC3网络应用程序,它有效地"拴在"一个经典的ASP网站(即旧页面是经典的asp,新页面是ASP.Net MVC).该站点要求用户登录,因此为了保护新的MVC页面,我检查cookie并使用id从经典ASP登录页面创建的数据库中检索会话数据.

因为用户可以在旧页面和新页面之间切换,并且我不是在2个应用程序之间共享会话数据,所以我在我的操作方法LogIn中检查每个请求的cookie和检索数据:

public PartialViewResult LogIn()
        {
            var cookieId = DecodeCookieId(System.Web.HttpContext.Current.Request.Cookies["cookiename"].Value);

            LoggedInViewModel viewModel = new LoggedInViewModel
            {
                Session = sessionRepository.Sessions.FirstOrDefault(s => s.GGAPSession_ID == cookieId)
            };
            return PartialView(viewModel);
        }
Run Code Online (Sandbox Code Playgroud)

这将数据传递给ViewModel,ViewModel在每个MVC页面的顶部显示登录的用户名,这就是为什么我认为这是一个检查的好地方.

当我尝试修改LogIn()以检查cookie和重定向(如果未找到)时,会出现问题:

public ActionResult LogIn()
{
   if (System.Web.HttpContext.Current.Request.Cookies["cookiename"] != null)
  {
     //  same method contents as above
  }
  else
  {
    return Redirect("http://localhost/index.asp");
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到了一个'儿童行为不允许执行重定向行动',我理解,但我该如何绕过这个?我应该在其他地方进行cookie检查吗?我应该在哪里进行会话管理?

dkn*_*ack 5

描述

对,你可以HttpContext.Response.Redirect用来解决这个问题.

样品

更改

return Redirect("http://localhost/index.asp");
Run Code Online (Sandbox Code Playgroud)

HttpContext.Response.Redirect("http://localhost/index.asp");
return EmptyResult();
Run Code Online (Sandbox Code Playgroud)

更多信息