【问题标题】:Why is my HttpContext null on a Razor Page View Model?为什么我的 HttpContext 在 Razor 页面视图模型上为空?
【发布时间】:2020-07-26 20:48:30
【问题描述】:

我是新手,正在寻求帮助。 我正在使用 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());
    }
}

我的想法是在 Create cookies 按钮上添加一个侦听器以添加一些 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?

【问题讨论】:

  • 据我所知,HttpContext 属性不应为空。但是,另一种方法是注入 IHttpContextAccessor,在您找出问题所在之前,我不会建议您这样做。
  • 同意,看起来不错。你能分享确切的异常堆栈跟踪吗?

标签: asp.net-core razor


【解决方案1】:

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

【讨论】:

  • 谢谢!我只使用剃须刀页面并将代码简化为如下所示:@{ string username; Context.Request.Cookies.TryGetValue("username", out username); }
猜你喜欢
  • 2018-10-05
  • 2019-11-15
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 2020-12-30
相关资源
最近更新 更多