【发布时间】:2019-12-15 19:37:05
【问题描述】:
我想在 MVC .NET Core 2.2 项目中使用 Session,但不仅在 Controller 中,而且在 Model 中。
有一些示例可以显示控制器中的用法,但我没有找到有关如何访问模型类中的会话的任何信息。另外我需要说的是,模型不在 Web 项目中,而是在单独的类库项目中。
这个问题有合适的答案或解决方案吗?
【问题讨论】:
我想在 MVC .NET Core 2.2 项目中使用 Session,但不仅在 Controller 中,而且在 Model 中。
有一些示例可以显示控制器中的用法,但我没有找到有关如何访问模型类中的会话的任何信息。另外我需要说的是,模型不在 Web 项目中,而是在单独的类库项目中。
这个问题有合适的答案或解决方案吗?
【问题讨论】:
通常不建议在类库中使用会话。您最好将特定值传递给您的库调用,或者只传递整个IHttpContextAccessor 以在模型类中获取HttpContext。
因此,您无需访问库方法中的设置,而是:
1.类库。
1) 为您的类库安装以下软件包:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="2.2.0" />
</ItemGroup>
2) 型号:
using Microsoft.AspNetCore.Http;
using System;
namespace ClassLibrary1
{
public class Product
{
private readonly IHttpContextAccessor _contextAccessor;
public Product(IHttpContextAccessor contextAccessor)
{
_contextAccessor = contextAccessor;
Name = _contextAccessor.HttpContext.Session.GetString("your session key");
}
public string Name { get; set; }
}
}
2.Web 应用程序。
1) Startup.cs
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
2) 控制器:
public class HomeController : Controller
{
private readonly IHttpContextAccessor _httpContextAccessor;
public HomeController(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
var product = new ClassLibrary1.Product(_httpContextAccessor );
}
}
【讨论】: