.Net Core MVC 2.1 中是否有等效的会话启动? [英] Is there a session start equivalent in .Net Core MVC 2.1?
问题描述
在 MVC 5 中,您可以在会话开始时为 global.asx 中的会话分配一个值.有没有办法在 .Net Core MVC 中做到这一点?我已经配置了会话,但在中间件中,它似乎在每次请求时都会被调用.
In MVC 5 you could assign a value to session in global.asx when the session started. Is there a way you can do this in .Net Core MVC? I have session configured but in the middleware it seems to get called on every request.
推荐答案
nercan 的解决方案可行,但我想我找到了一个需要更少代码并且可能有其他优势的解决方案.
nercan's solution will work, but I think I found a solution that requires less code and may have other advantages.
首先,像这样包装 DistributedSessionStore:
First, wrap DistributedSessionStore like this:
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 中注册这个新类:
Then register this new class in 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
这篇关于.Net Core MVC 2.1 中是否有等效的会话启动?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!