如何访问从 PageModel 派生的 class 中的 HTTPContext?
How can I access the HTTPContext in a class derived from PageModel?
为了简化我的 Razor 页面中会话变量的处理,我想在 PageModel 和 IndexModel 之间插入一个单独的 class。
PageModel <- MyPageModel <- IndexModel
现在我注意到在 classes MyPageModel 和 IndexModel 中定义了 HTTPContext 但未设置 (=null)。
但是,如果我直接从 class PageModel 派生 class IndexModel,一切都很好,我可以访问 HTTPContext 和会话变量。
到目前为止,Startup 中的设置都很好,因为其余页面工作正常。
我究竟做错了什么?还是我忽略了什么?
Class 派生自 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");
}
}
}`
Class 从 MyPageModel 派生的 IndexModel
namespace WebApp.Areas.Ansicht12.Pages
{
public class IndexModel : MyPageModel
{
public IndexModel() : base()
{
}
public void OnGet()
{
}
}
}
调用 Razor 页面的构造函数时,HttpContext 不可用。您可以使用 IHttpContextAccessor
来满足您的要求。
我的页面模型:
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");
}
}
索引模型:
public class IndexModel: MyPageModel
{
public IndexModel(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor)
{
}
public void OnGet()
{
}
}
一定要在Startup.ConfigureServices()
方法中注册服务:
services.AddHttpContextAccessor();
为了简化我的 Razor 页面中会话变量的处理,我想在 PageModel 和 IndexModel 之间插入一个单独的 class。
PageModel <- MyPageModel <- IndexModel
现在我注意到在 classes MyPageModel 和 IndexModel 中定义了 HTTPContext 但未设置 (=null)。 但是,如果我直接从 class PageModel 派生 class IndexModel,一切都很好,我可以访问 HTTPContext 和会话变量。 到目前为止,Startup 中的设置都很好,因为其余页面工作正常。 我究竟做错了什么?还是我忽略了什么?
Class 派生自 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");
}
}
}`
Class 从 MyPageModel 派生的 IndexModel
namespace WebApp.Areas.Ansicht12.Pages
{
public class IndexModel : MyPageModel
{
public IndexModel() : base()
{
}
public void OnGet()
{
}
}
}
调用 Razor 页面的构造函数时,HttpContext 不可用。您可以使用 IHttpContextAccessor
来满足您的要求。
我的页面模型:
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");
}
}
索引模型:
public class IndexModel: MyPageModel
{
public IndexModel(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor)
{
}
public void OnGet()
{
}
}
一定要在Startup.ConfigureServices()
方法中注册服务:
services.AddHttpContextAccessor();