【问题标题】:Accessing Session object inside an Asp Core 2 View在 Asp Core 2 视图中访问 Session 对象
【发布时间】:2018-04-03 07:01:28
【问题描述】:

我想在视图中显示 Session。那可能吗? 在我看来,我尝试这样做

<div class="content-header col-xs-12">
   <h1>Welcome, @HttpContext.Session.GetString("userLoggedName")</h1>
</div>

但我得到一个错误

严重性代码描述项目文件行抑制状态错误 CS0120 非静态字段、方法或属性“HttpContext.Session”需要对象引用

任何帮助,我将不胜感激。谢谢

【问题讨论】:

    标签: c# asp.net-mvc razor asp.net-core asp.net-core-2.0


    【解决方案1】:

    您可以将IHttpContextAccessor 实现注入到您的视图中,并使用它来获取 Session 对象

    @using Microsoft.AspNetCore.Http
    @inject IHttpContextAccessor HttpContextAccessor
    <h1>@HttpContextAccessor.HttpContext.Session.GetString("userLoggedName")</h1>
    

    假设您已经为在 Startup 类中启用会话进行了所有设置。

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSession(s => s.IdleTimeout = TimeSpan.FromMinutes(30));
        services.AddMvc();
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseSession();  // This line is needed
    
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
    
        });
    }
    

    【讨论】:

    • 是的。我们现在可以用 asp net core 做到这一点。无需通过 ViewBag 左右传递东西。 ;)
    • 但是我得到了这个The type or namespace name 'IHttpContextAccessor' could not be found,并且我已经在 Startup 类中设置了启用会话。
    • 您应该将@using Microsoft.AspNetCore.Http 添加到您的视图顶部。我用那个更新了答案。
    • 但是,为什么?为什么微软要对所有粉丝这样做?
    • 对于其他任何人,如果您从 @AndhikaKurniaAufaAzham 收到该错误,您还需要 services.AddHttpContextAccessor() in ConfigureServices()
    猜你喜欢
    • 2014-02-27
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多