緩存
緩存在內存中 ASP.NET Core
使用 IMemoryCache內存中緩存是使用依賴關系注入從應用中引用的服務。 請在ConfigureServices中調用AddMemoryCache():
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app)
{
app.UseMvcWithDefaultRoute();
}
}
在構造函數中請求 IMemoryCache實例:
public class HomeController : Controller
{
private IMemoryCache cache;
public HomeController(IMemoryCache cache)
{
this.cache = cache;
}
public IActionResult Index()
{
cache.Set("name", $"shijia{DateTime.Now}", TimeSpan.FromSeconds(10));
return View();
}
public IActionResult About()
{
object result;
string value = cache.TryGetValue("name", out result) ? $"獲取緩存name{result}" : "獲取緩存失敗";
return Content(value);
}

分布式緩存
https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed?view=aspnetcore-2.1
Session
要添加對Session支持,否則會報錯Session has not been configured for this
application or request。使用方法 http://www.cnblogs.com/sword-successful/p/6243841.html
(1)nuget安裝Microsoft.AspNetCore.Session
(2) ConfigureServices中services.AddSession();
(3)Configure中app.UseSession();
(4)TempData依賴於Session,所以也要配置Session。
(5)HttpContext.Session,但是原始只有void Set(string key, byte[] value)、bool TryGetValue(string key, out byte[] value)這兩個方法。如果using Microsoft.AspNetCore.Http;(需要安裝Microsoft.AspNetCore.Http.Extensions)還可以使用SessionExtensions中的值是int、string類型的,其他類型只能自己使用json進行序列化處理。
(6)推薦使用redis做進程外session:
http://www.hossambarakat.net/2016/02/03/configuring-redis-as-asp-net-core-1-0-session-store/

1.在MVC Controller里使用HttpContext.Session
using Microsoft.AspNetCore.Http;
public class HomeController:Controller
{
public IActionResult Index()
{
HttpContext.Session.SetString("code","123456");
return View();
}
public IActionResult About()
{
ViewBag.Code=HttpContext.Session.GetString("code");
return View();
}
}
2.如果不是在Controller里,你可以注入IHttpContextAccessor
public class SomeOtherClass
{
private readonly IHttpContextAccessor _httpContextAccessor;
private ISession _session=> _httpContextAccessor.HttpContext.Session;
public SomeOtherClass(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor=httpContextAccessor;
}
public void Set()
{
_session.SetString("code","123456");
}
public void Get()
{
string code = _session.GetString("code");
}
}
資料:ASP.NET Core 中的會話和應用狀態
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/app-state?view=aspnetcore-2.1#session-state
問題:
Session 保存之后取不到值的解決方案
解決方案:
注釋掉下面這段:
public void ConfigureServices(IServiceCollection services)
{
// services.Configure<CookiePolicyOptions>(options =>
// {
// // This lambda determines whether user consent for non-essential cookies is needed for a given request.
// options.CheckConsentNeeded = context => true;
// options.MinimumSameSitePolicy = SameSiteMode.None;
// });
services.AddMemoryCache();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddSession();
}
