gpt4 book ai didi

asp.net-mvc - .Net Core MVC 2.1 中是否有等效的 session 启动?

转载 作者:行者123 更新时间:2023-12-02 03:27:43 27 4
gpt4 key购买 nike

在 MVC 5 中,您可以在 session 启动时为 global.asx 中的 session 赋值。有没有办法在 .Net Core MVC 中做到这一点?我配置了 session ,但在中间件中,似乎每个请求都会调用它。

最佳答案

nercan 的解决方案可以工作,但我想我找到了一个需要更少代码并且可能具有其他优点的解决方案。

首先,像这样包装 DistributedSessionStore:

using System;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Session;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Logging;

public interface IStartSession
{
void StartSession(ISession session);
}

public class DistributedSessionStoreWithStart : ISessionStore
{
DistributedSessionStore innerStore;
IStartSession startSession;
public DistributedSessionStoreWithStart(IDistributedCache cache,
ILoggerFactory loggerFactory, IStartSession startSession)
{
innerStore = new DistributedSessionStore(cache, loggerFactory);
this.startSession = startSession;
}

public ISession Create(string sessionKey, TimeSpan idleTimeout,
TimeSpan ioTimeout, Func<bool> tryEstablishSession,
bool isNewSessionKey)
{
ISession session = innerStore.Create(sessionKey, idleTimeout, ioTimeout,
tryEstablishSession, isNewSessionKey);
if (isNewSessionKey)
{
startSession.StartSession(session);
}
return session;
}
}

然后在 Startup.cs 中注册这个新类:

class InitSession : IStartSession
{
public void StartSession(ISession session)
{
session.SetString("Hello", "World");
}
}

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton<IStartSession, InitSession>();
services.AddSingleton<ISessionStore, DistributedSessionStoreWithStart>();
services.AddSession();
...
}

完整代码在这里: https://github.com/SurferJeffAtGoogle/scratch/tree/master/StartSession/MVC

关于asp.net-mvc - .Net Core MVC 2.1 中是否有等效的 session 启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52533831/

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