由于我继承了一个需要升级到 .net core 2.2 的项目,因此我遇到了多个依赖项的问题。
这里我缺少HttpSessionState
private static string CollectionToHtmlTable(HttpSessionState collection)
{
// Converts HttpSessionState to NameValueCollection
var nvc = new NameValueCollection();
foreach (string item in collection)
{
nvc.Add(item, collection[item].ToString());
}
return CollectionToHtmlTable(nvc);
}
有哪些关于如何访问 .net core 类库中的 HttpSessionState
的优秀代码示例?
最佳答案
Microsoft.AspNetCore.Session
包包含在 Microsoft.AspNetCore.App
元包中,提供用于管理 session 状态的中间件。
要启用 session 中间件,Startup 必须包含:
- 任何 IDistributedCache 内存缓存。 IDistributedCache 实现用作 session 的后备存储。
- 调用
ConfigureServices
中的AddSession
。 - 在
Configure
中调用UseSession
。
代码:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
});
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseSession();
app.UseHttpContextItemsMiddleware();
app.UseMvc();
}
}
HttpContext.Session
在配置 session 状态后可用。
在调用 UseSession
之前无法访问HttpContext.Session
。
UseMvc
之后调用UseSession
时,会发生InvalidOperationException
异常。
使用 HttpContext.Session
从 Razor Pages PageModel 类或 MVC Controller 类访问 session 状态。此属性是一个 ISession
实现。
ISession
实现提供了多种扩展方法来设置和检索整数和字符串值。扩展方法位于 Microsoft.AspNetCore.Http 命名空间中(添加一个
using Microsoft.AspNetCore.Http;
获取扩展方法访问权限的语句)
当项目引用 Microsoft.AspNetCore.Http.Extensions
包时。
访问类库中的 Httpcontext:
HttpContext
在 Controller 中可用,但要访问其他类,您需要在类中注入(inject) IHttpContextAccessor
。
要访问 session ,请使用以下代码:-
var sessionValue =_context.HttpContext.Session.GetString("KeyName");
更多详细信息可以在以下位置找到: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.2
关于c# - asp.net core 2.2升级并且类库中不提供HttpSessionState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53917697/