Asp.net core 为什么我的HttpContext在Razor页面视图模型上为空?

Asp.net core 为什么我的HttpContext在Razor页面视图模型上为空?,asp.net-core,razor,Asp.net Core,Razor,我是个新手,正在寻求帮助。 我正在使用netcoreapp2.2在一个已经存在的项目中工作,并设法将一个 从多个问题和教程中建模,如下所示: public class AdminViewModel : PageModel { public string Username { get => GetCookie("username"); } public string Password { get =&

我是个新手,正在寻求帮助。 我正在使用netcoreapp2.2在一个已经存在的项目中工作,并设法将一个 从多个问题和教程中建模,如下所示:

public class AdminViewModel : PageModel
{
    public string Username
    {
        get => GetCookie("username");
    }
    public string Password
    {
        get => GetCookie("password");
    }
    public void OnGet()
    {
    }

    private string GetCookie(string cookieName)
    {
        HttpContext context = HttpContext;
        HttpRequest request = context.Request;
        string result;
        if (request.Cookies.TryGetValue(cookieName, out result))
        {
            return result;
        }
        return "";
    }
}
有人认为:

@model Regulator2App.Web.Views.Admin.AdminViewModel
@{
    string username = Model.Username;
    string password = Model.Password;
    bool isLoggedIn = username.Equals("admin") && password.Equals("admin");
}
@if (isLoggedIn)
{
    <div>"You're in!"</div>
}
else
{
    <button id="cookie">Create cookies</button>
}
<script src="~/js/admin.js"></script>
我的想法是在“创建cookies”按钮上添加一个侦听器来添加一些cookies,然后通过模型检索它们,我面临的问题是我的
上下文总是空的:

NullReferenceException: Object reference not set to an instance of an object.
AdminViewModel.GetCookie(string cookieName) in AdminView.cshtml.cs
HttpRequest request = context.Request;

如何正确访问上下文以检索cookies?

HttpContext
null
,因为您正在手动创建
AdminViewModel
实例,但它应该由框架创建。问题是您正在与混合,而这些是完全不同的东西,不应该像我在另一篇文章中提到的那样一起使用。

据我所知,HttpContext属性不应该为null。但是,另一种方法是注入
IHttpContextAccessor
,在您解决问题之前,我不会建议这样做。同意,它看起来很好。你能分享确切的异常堆栈跟踪吗?谢谢!我只使用razor页面,并将代码简化为如下所示:@{string username;Context.Request.Cookies.TryGetValue(“username”,out username);}
NullReferenceException: Object reference not set to an instance of an object.
AdminViewModel.GetCookie(string cookieName) in AdminView.cshtml.cs
HttpRequest request = context.Request;