2

我需要从控制器中删除会话,因为它给我的 Redis 服务器增加了不必要的负载。我使用 Redis 来存储我的会话。

我有一个控制器,它是从一个快速且大量调用的 Web 挂钩中使用的,该 Web 挂钩不使用会话,如果我可以从中完全删除会话会更好。

当我用谷歌搜索时,我发现了[ControllerSessionState]从控制器中删除会话的属性,但不幸的是它只适用于 Mvc3。

Asp.Net Mvc Core 有类似的东西吗?

4

1 回答 1

1

有两种基本方法

中间件过滤器

创建一个基本控制器,您的有状态控制器从中继承并使用注册会话的中间件过滤器属性对其进行装饰。

创建后,您将拥有一个基类

public class SessionPipeline
{
    public void Configure(IApplicationBuilder applicationBuilder)
    {
        applicationBuilder.UseSession();
    }
}

[MiddlewareFilter(typeof(SessionPipeline))]
public class StatefulControllerBase : ControllerBase
{
}

并让您的有状态控制器继承自StatefulControllerBase而不是ControllerBase/Controller

使用 MapWhen 有条件地注册 Session

这种方法在 ASP.NET Core 1.x 的第一个版本中更为常见,但如今已很少使用

app.MapWhen(context => !context.Request.Path.StartsWith("/hooks/"), branch => 
{
    branch.UseSession();
});

这种方式会话中间件将仅用于与/hooks/请求路径不匹配的路径。

于 2019-07-25T08:02:04.350 回答