gpt4 book ai didi

asp.net-mvc - 在razor View .net core 2中访问 session 变量

转载 作者:行者123 更新时间:2023-12-03 02:05:40 25 4
gpt4 key购买 nike

我正在尝试在 .net core 2.0 项目的 razor View 中访问 session 存储。 .net 2.0 View 中是否有 @Session["key"] 的等效项?我还没有找到如何执行此操作的有效示例 - 我使用我找到的方法收到此错误:

An object reference is required for the non-static field, method, or propery HttpContext.Session

查看:

@using Microsoft.AspNetCore.Http

[HTML button that needs to be hidden/shown based on trigger]

@section scripts {
<script>
var filteredResults = '@HttpContext.Session.GetString("isFiltered")';
</script>
}

启动.cs:

public void ConfigureServices(IServiceCollection services)
{
services.AddSession(options => {
options.IdleTimeout = TimeSpan.FromMinutes(30);
});

services.AddMvc();

// Added - uses IOptions<T> for your settings.
// Added - replacement for the configuration manager
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//exception handler stuff
//rewrite http to https
//authentication
app.UseSession();

app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}

最佳答案

您可以在 ASP.NET Core 2.0 中的 View 中进行依赖项注入(inject):)

您应该将 IHttpContextAccessor 实现注入(inject)到您的 View 中,并使用它从中获取 HttpContextSession 对象。

@using Microsoft.AspNetCore.Http
@inject IHttpContextAccessor HttpContextAccessor
<script>
var isFiltered = '@HttpContextAccessor.HttpContext.Session.GetString("isFiltered")';
alert(isFiltered);
</script>

假设您在 Startup.cs 类中有相关代码来启用 session ,这应该可以工作。

public void ConfigureServices(IServiceCollection services)
{
services.AddSession(s => s.IdleTimeout = TimeSpan.FromMinutes(30));
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSession();

app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");

});
}

要在 Controller 中设置 session ,您需要执行相同的操作。将 IHttpContextAccessor 注入(inject)您的 Controller 并使用它

public class HomeController : Controller
{
private readonly ISession session;
public HomeController(IHttpContextAccessor httpContextAccessor)
{
this.session = httpContextAccessor.HttpContext.Session;
}
public IActionResult Index()
{
this.session.SetString("isFiltered","YES");
return Content("This action method set session variable value");
}
}

适当使用 session 。如果您试图传递一些特定于当前页面的数据(例如:网格数据是否被过滤,这对于当前请求来说是非常特定的),那么您不应该使用 session 。考虑使用 View 模型并拥有可用于传递此数据的属性。您始终可以根据需要通过 View 数据字典将这些值作为附加数据传递给部分 View 。

请记住,Http 是无状态的。向其中添加有状态行为时,请确保您这样做是出于正确的原因。

关于asp.net-mvc - 在razor View .net core 2中访问 session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46921275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com