代码之家  ›  专栏  ›  技术社区  ›  bilpor

解决方案.NET核心2.1中的会话更改

  •  0
  • bilpor  · 技术社区  · 5 年前

    我有一个.NET核心2.1解决方案,其中有一个WEP API项目,目前使用Razor的一个单独的MVC前端项目。在两个项目startup.cs文件中,我声明 services.AddHttpContextAccessor();

    从前端代码我将会话设置为1小时,我可以看到httpContext.session.id的值。因此,现在调用WebAPI方法并传递一个IHttpContextAccessor对象,但现在当我查看所传递上下文上的session.id时,它的值与调用应用程序设置的值不同。为什么上下文不一样?

    在我的webapi中,我编写了一个自定义的authorisationfiter,它被放置在api的一个方法上。我以以下方式引用上下文:

    …..
    public class AuthorisationFilter : IAuthorizationFilter
        {
            private readonly IHttpContextAccessor _httpContext;
            public AuthorisationFilter(IHttpContextAccessor httpContext) => _httpContext = httpContext;
    
            public void OnAuthorization(AuthorizationFilterContext context)
            {…….
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   matt_lethargic    5 年前

    如果MVC站点有一个单独的项目,那么实际上您正在创建两个单独的站点,它们运行在各自的应用程序池等中。您不能在这两个站点之间共享会话状态,默认情况下,会话数据存储在每个应用程序的内存中。您也许可以为此设置一个共享会话存储,但这听起来充其量像是一次黑客攻击,您可能希望了解您正在尝试实现的目标,因为这将是一种更好的方法。 Further Reading

    我不确定您是如何“传递”IHttpContextAccessor对象的,但这似乎不是一个好主意。

    现在,当你创建一个API的时候,你真的想让它 stateless ,使用会话状态与此完全相反。