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

时间:2012-01-06 18:25:16

标签: c# asp.net-mvc cookies

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

因为用户可以在旧的&新页面,我不是在2个应用程序之间共享会话数据,我检查了cookie和&在我的操作方法LogIn:

中检索每个请求的数据
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);
        }

这将数据传递给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");
  }
}

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

2 个答案:

答案 0 :(得分:5)

描述

是的,您可以使用HttpContext.Response.Redirect来解决此问题。

示例

更改

return Redirect("http://localhost/index.asp");

HttpContext.Response.Redirect("http://localhost/index.asp");
return EmptyResult();

更多信息

答案 1 :(得分:0)

我认为您可以在mvc网站中使用全局操作过滤器来执行此操作。这是“ASP.NET MVC in Action”一书中的一般规范。你在

中检索
OnActionExecuting

如果cookie存在。否则,

filterContext.Result = new RedirectResult("http://localhost/index.asp")