【问题标题】:Response.Cookies gets reset when RedirectToAction is calledResponse.Cookies 在调用 RedirectToAction 时被重置
【发布时间】:2011-04-07 01:00:00
【问题描述】:

在我的 asp.net-mvc 项目中,我有一个 AccountController,它在登录时将带有用户首选项的 cookie 设置为 Request.Response,然后执行 RedirectToAction。 重定向后,cookie 会被重置,因此我会丢失我的设置。

我能想出的唯一解决方案是将 cookie 中的数据添加到 tempdata 中,然后稍后在 RedirectToAction 的目标操作中再次获取它。这当然有点倒退......

这是一种常见的做法吗?没有更好的解决方案吗?我应该以不同的方式处理我的 cookie 吗?

【问题讨论】:

    标签: .net asp.net-mvc cookies redirect


    【解决方案1】:

    是的,为此使用TempData 是一种常见的做法,这与应该使用TempData 的方式非常一致 - 在两个操作方法之间传递临时数据,仅由客户端重定向。

    由于从登录页面重定向到任何其他操作方法,您可以在基本控制器中实现从 TempData 设置 cookie 的功能。这将使任何操作方法 cookie-via-TempData 兼容。这是在页面上显示通知时的常见情况,其中通知(如本网站上的通知)通常会从TempData 到ViewData 传送到视图自动。

    【讨论】:

    • 我希望有更好的实现。如果我以这种方式实现它,我将失去所有的解耦......
    • @boris 具体是什么解耦?
    • 我从控制器中提取了我的用户会话处理,因此 cookie 不会搞砸我的测试,并且如果我能找到大大地。现在我的控制器需要再次知道我的会话的实现(从 tempdata 中获取 cookie)并且我的会话需要知道我的控制器(将其放入 tempdata)。
    • @boris 取决于您要测试的内容。在您的具体示例中,我会断言 controller.TempData["NewCookie"] 在执行操作方法后设置。然后,在另一个测试中,我会断言 request.Cookies.Add() 在设置 TempData["NewCookie"] 时执行操作方法时被调用(例如,通过模拟) - 或者控制器的 ISessionStateProvider (您自己的可模拟实现) .AddCookie() 被调用。这当然不需要中断测试或解耦。如果是这样,TempData 的任何其他用途也一样,对吧?
    • @bzlm。到目前为止,正是出于这个原因,我从来没有使用过 TempData 用户。我承认这是可能的,我会使用它,但我觉得它有点代码味道:(
    猜你喜欢
    • 2020-04-19
    • 2021-04-07
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多