小编Din*_*rdo的帖子

在 .NET Core 3.1 中,RequestCookieCollection 不能再用于在单元测试中创建 cookie

我刚刚从 .NET Core 2.2 升级到 3.1。我进行了测试以确认我添加的扩展方法HttpContext.Request正在工作。我以前能够做这样的事情:

    var context = new DefaultHttpContext();
    var c = new Dictionary<string, string> {{"test", "passed"}};
    context.Request.Cookies = new RequestCookieCollection(cookies);

    var result = context.Request.GetPrimedValue();
Run Code Online (Sandbox Code Playgroud)

现在这不可能了吗?我尝试为此使用 Moq,但似乎有太多东西阻止我使用任何可用的东西来设置 Cookies 属性。对此有何决议?

注意:我知道这是使用一个不应该是内部的内部类,所以我不反对隐藏内部命名空间,但我不确定我的替代方案是什么。

c# cookies unit-testing asp.net-core-3.1

11
推荐指数
4
解决办法
2734
查看次数

将通用预先加载方法从EF6转换为EF Core

对于EF6,我在我的通用存储库中有一个方法,我将其暴露给所有服务层,以便根据需要使用任何嵌套属性从数据库中检索实体:

public IQueryable<T> OldMethod(params Expression<Func<T, object>>[] includeProperties)
{
    var queryable = set.AsQueryable();

    return includeProperties.Aggregate(queryable, (current, includeProperty) => current.Include(includeProperty));
}
Run Code Online (Sandbox Code Playgroud)

这样,我可以通过以下方式使用该方法:

var data = repo.OldMethod(x => x.Papers, => x.People.Select(y => y.Addresses)).ToList();
Run Code Online (Sandbox Code Playgroud)

在EF6中,这将加载每个人的Papers导航属性,People导航属性和Addresses导航属性.正如预期的那样,这会在EFCore中引发异常.由于在EFCore中切换到Include - > ThenInclude方法,我不太清楚如何在我的服务层轻松复制它,我不想要任何有关EntityFramework的信息.

c# entity-framework entity-framework-core .net-core

6
推荐指数
1
解决办法
324
查看次数

.NET Core 2.x中的默认会话到期时间是什么?

在启动类中,我使用以下代码启用会话存储:

        services.AddDistributedMemoryCache()
        .AddSession(options =>
            {
                options.IdleTimeout = TimeSpan.FromMinutes(20);
                options.Cookie.HttpOnly = true;
            })
Run Code Online (Sandbox Code Playgroud)

但是,如果我正确理解这一点,则设置该IdleTimeout属性仅表示如果用户在20分钟内未完成任何操作,会话将重新开始。我的应用程序具有轮询功能,它每5-10秒使用一次会话存储中的用户信息,因此我认为这在这里永远不会有用。用户权限和角色可以从当前用户浏览器之外执行的操作中更改,因此我想将会话存储限制为1分钟。我似乎找不到关于默认到期时间或如何正确设置的确切说法。

CookieBuilder类具有Expiration和MaxAge选项,但我不知道哪个是必需的。我还阅读了Expiration被忽略的信息,这使我对该主题的困惑更加严重。

更新:当我尝试设置过期时间时,我收到此消息:“无法为SessionOption定义的cookie设置过期时间”,因此我将MaxAge设置为1分钟,但是我可以看到该会话中仍然有旧的用户数据超过1分钟后。

c# session session-cookies asp.net-core-2.0

6
推荐指数
1
解决办法
185
查看次数