整个解决方案.net Core 2.1的会话更改

时间:2018-11-20 08:57:56

标签: c# asp.net-mvc asp.net-web-api

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

从前端代码中,我将会话设置为1小时,然后可以看到HttpContext.Session.Id的值。因此,现在调用WebApi方法,并传递了IhttpContextAccessor对象,但是现在当我查看传递的上下文中的session.Id时,它不具有与调用应用程序设置的值相同的值。为什么上下文不一样?

在我的WebApi中,我编写了一个自定义的AuthorizationFiter,并将其放置在api的“方法”之一上。我通过以下方式引用上下文:

…..
public class AuthorisationFilter : IAuthorizationFilter
    {
        private readonly IHttpContextAccessor _httpContext;
        public AuthorisationFilter(IHttpContextAccessor httpContext) => _httpContext = httpContext;

        public void OnAuthorization(AuthorizationFilterContext context)
        {…….

1 个答案:

答案 0 :(得分:2)

如果您为MVC站点有一个单独的项目,那么实际上您正在创建两个在其自己的应用程序池等中运行的单独站点。您无法在这两个站点之间共享会话状态,默认情况下,每个会话数据都存储在内存中应用程式。您也许可以为此设置一个共享的会话存储,但这充其量听起来像是一种破解,并且您可能想看看自己要实现的目标,因为这可能是一种更好的方法。 Further Reading

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

这些天来,您真的想使用会话状态使其成为stateless的API,与此完全相反。