为什么我的HttpContext在Razor页面视图模型上为null?

时间:2020-07-26 04:16:43

标签: asp.net-core razor

我是新手,需要帮助。 我正在使用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>

和控制器:

public class AdminController : Controller
{
    [HttpGet("/admin/")]
    public IActionResult AdminView()
    {
        return View(new AdminViewModel());
    }
}

我的想法是在“创建cookie”按钮上添加一个侦听器,以添加一些cookie,然后通过模型检索它们,我面临的问题是我的context始终为空:

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

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

1 个答案:

答案 0 :(得分:3)

HttpContextnull,因为您正在手动创建AdminViewModel实例,但它应由框架创建。问题在于,您正在将razor pagescontrollers混合使用,而这是完全不同的事情,不应像我在其他answer中提到的那样一起使用。