首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问从PageModel派生的类中的HTTPContext?

如何访问从PageModel派生的类中的HTTPContext?
EN

Stack Overflow用户
提问于 2021-08-05 17:40:07
回答 1查看 87关注 0票数 0

为了简化我的Razor页面中会话变量的处理,我想在PageModel和IndexModel之间插入一个单独的类。

PageModel <- MyPageModel <- IndexModel

现在,我注意到在MyPageModel和IndexModel类中定义了HTTPContext,但没有设置(=null)。但是,如果我直接从PageModel类派生IndexModel类,那么一切都很好,并且我可以访问HTTPContext和会话变量。到目前为止,Startup中的设置都很好,其他页面也工作得很好。我做错了什么?还是我忽略了什么?

从PageModel派生的类MyPageModel

代码语言:javascript
复制
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace WebApp.Areas.Ansicht12.Pages
{
    public class MyPageModel : PageModel
    {
        string s1 = default;
        string s2 = default;
        int i3 = 0;

        public MyPageModel() : base()
        {
            s1 = HttpContext.Session.GetString("Var-1");
            s2 = HttpContext.Session.GetString("Var-2");
            i3 = (int)HttpContext.Session.GetInt32("Var-3");
        }

    }
}`

从MyPageModel派生的类IndexModel

代码语言:javascript
复制
namespace WebApp.Areas.Ansicht12.Pages
{
    public class IndexModel : MyPageModel
    {
        public IndexModel() : base()
        {
        }

        public void OnGet()
        {
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-09 06:55:49

调用Razor页面的构造函数时,HttpContext不可用。您可以使用IHttpContextAccessor来满足您的需求。

MyPageModel:

代码语言:javascript
复制
public class MyPageModel : PageModel
{
    string s1 = default;
    string s2 = default;
    int i3 = 0;
    public MyPageModel(IHttpContextAccessor httpContextAccessor) :base()    
    {
        s1 = httpContextAccessor.HttpContext.Session.GetString("Var-1");
        s2 = httpContextAccessor.HttpContext.Session.GetString("Var-2");
        i3 = (int)httpContextAccessor.HttpContext.Session.GetInt32("Var-3");
    }            
}

IndexModel:

代码语言:javascript
复制
public class IndexModel: MyPageModel
{
    public IndexModel(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor)
    {
    }

    public void OnGet()
    {
        
    }
}

请确保在Startup.ConfigureServices()方法中注册服务:

代码语言:javascript
复制
services.AddHttpContextAccessor();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68671218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档