Asp.net mvc 如何在视图中获取会话值asp.net core

Asp.net mvc 如何在视图中获取会话值asp.net core,asp.net-mvc,session-variables,Asp.net Mvc,Session Variables,我正试着这样做 @HttpContext.Session.GetString("some"); 但是我越来越 * 非静态字段需要对象引用 * 任何有想法的人?您必须将IHttpContextAccessor实现注入视图并使用它 @using Microsoft.AspNetCore.Http @inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor 现在,您可以访问HttpContext属性,然后访问

我正试着这样做

@HttpContext.Session.GetString("some");
但是我越来越

*

非静态字段需要对象引用

*


任何有想法的人?

您必须将
IHttpContextAccessor
实现注入视图并使用它

@using Microsoft.AspNetCore.Http
@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor
现在,您可以访问
HttpContext
属性,然后访问
Session

<p>
    @HttpContextAccessor.HttpContext.Session.GetInt32("MySessionKey")
</p>
iaapplicationbuilder.UseSession
方法调用
Configure
方法

app.UseSession();

首先通过在startup类的ConfigureServices方法中添加以下2行代码来启用会话:

services.AddMemoryCache();
services.AddSession();
在相同的方法中,添加用于为IHttpContextAccessor创建singleton对象以访问视图中的会话的代码

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
Startup类的完整代码如下所示:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddMemoryCache();
    services.AddSession();
    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseDeveloperExceptionPage();
    app.UseStatusCodePages();
    app.UseStaticFiles();
    app.UseSession();
    app.UseMvc(routes =>
    {
        // Default Route
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}
然后您可以从视图中的session变量中获取值,如下所示:

@HttpContextAccessor.HttpContext.Session.GetString("some")

我只是修改了@Shyju的答案,加入了完整的代码。

@Navigator只是添加了
@Shyju
的建议,
IHttpContextAccessor
可以工作,但可能会增加一些显著的性能开销(如报告所述)因此,从
ASP.NET Core 1.0 RC2开始,默认情况下它没有注册,因此您需要按照
@Shyju
的建议在
Starup.cs
中进行一些配置。另一种解决方案是使用Microsoft.AspNetCore.Http在顶部添加
,然后使用
@HttpContext.Session.GetString(“一些”)会有用的。çox sağol(谢谢)@shyjuget32似乎不可用?需要使用Microsoft.AspNetCore.Http添加@
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddMemoryCache();
    services.AddSession();
    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseDeveloperExceptionPage();
    app.UseStatusCodePages();
    app.UseStaticFiles();
    app.UseSession();
    app.UseMvc(routes =>
    {
        // Default Route
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}
@using Microsoft.AspNetCore.Http
@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor
@HttpContextAccessor.HttpContext.Session.GetString("some")