gpt4 book ai didi

c# - 将 cookie 添加到 Request.Cookies 集合

转载 作者:太空狗 更新时间:2023-10-29 20:17:51 26 4
gpt4 key购买 nike

我正在尝试创建一个包装器类来处理 HttpContext 的内容。我正在创建一个 cookie,但无法添加到 HttpContext.Request 或 Response cookie 集合。

我正在使用最小起订量。我还使用来自以下链接的 MvcMockHelp: http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx

当我尝试在以下代码中添加 Cookies 集合时:

        HttpContextBase c1 = MvcMockHelpers.FakeHttpContext();
HttpCookie aCookie = new HttpCookie("userInfo");
aCookie.Values["userName"] = "Tom";
c1.Request.Cookies.Add(aCookie); <------ Error here

我在代码 c1.Request.Cookies.Add(aCookie) 的第 4 行出现以下错误;

Object reference not set to an instance of an object.

我也试过如下实例化上下文对象,但还是不行

HttpContextBase c = MvcMockHelpers.FakeHttpContext
("~/script/directory/NAMES.ASP?city=irvine&state=ca&country=usa");

我看到 Request 中的 Cookies 集合为 NULL。如何实例化它?

我也试过以下但没有运气。

c1.Request.Cookies["userName"].Value = "Tom";

请让我知道我做错了什么。

最佳答案

查看 Hansleman 的代码,Request 属性被创建为 Mock,但是,该模拟的属性没有设置,所以这就是 Cookies 的原因 为 null,您不能设置它,因为它是一个只读属性。

你有两个选择:

  1. FakeHttpContext() 中设置 Cookies 属性的模拟方法,或
  2. 如果您不想这样做,假设您直接引用库,那么您可以简单地从 HttpContextBase 重构模拟的 HttpRequestBase你可以像这样访问:

    [Test]
    public void SetCookie()
    {
    var c1 = MvcMockHelpers.FakeHttpContext();
    var aCookie = new HttpCookie("userInfo");
    aCookie.Values["userName"] = "Tom";

    var mockedRequest = Mock.Get(c1.Request);
    mockedRequest.SetupGet(r => r.Cookies).Returns(new HttpCookieCollection());
    c1.Request.Cookies.Add(aCookie);

    Debug.WriteLine(c1.Request.Cookies["userInfo"].Value);
    }

    Mock.Get(object) 将返回 Mock,然后您可以在其上设置 cookie 并使用它。

通常,您可以使用静态方法 Get(MockedThing.Object)Object 重新创建到它的 Mock

关于c# - 将 cookie 添加到 Request.Cookies 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10046090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com