为了简化我的Razor页面中会话变量的处理,我想在PageModel和IndexModel之间插入一个单独的类。
PageModel <- MyPageModel <- IndexModel
现在,我注意到在MyPageModel和IndexModel类中定义了HTTPContext,但没有设置(=null)。但是,如果我直接从PageModel类派生IndexModel类,那么一切都很好,并且我可以访问HTTPContext和会话变量。到目前为止,Startup中的设置都很好,其他页面也工作得很好。我做错了什么?还是我忽略了什么?
从PageModel派生的类MyPageModel
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
namespace WebApp.Areas.Ansicht12.Pages
{
public class IndexModel : MyPageModel
{
public IndexModel() : base()
{
}
public void OnGet()
{
}
}
}发布于 2021-08-09 06:55:49
调用Razor页面的构造函数时,HttpContext不可用。您可以使用IHttpContextAccessor来满足您的需求。
MyPageModel:
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:
public class IndexModel: MyPageModel
{
public IndexModel(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor)
{
}
public void OnGet()
{
}
}请确保在Startup.ConfigureServices()方法中注册服务:
services.AddHttpContextAccessor();https://stackoverflow.com/questions/68671218
复制相似问题