【问题标题】:ClaimsPrincipal.HttpContext in .Net 5.Net 5 中的 ClaimsPrincipal.HttpContext
【发布时间】:2020-08-01 02:41:55
【问题描述】:

我试图在我的单元测试(使用 .net 5 预览版)中模拟 IPrinciple(因为我有一个使用 User.Identity.Name 的控制器操作,我想为其编写单元测试)。参考this question 中的答案,我的单元测试中有以下内容。

var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
{
    new Claim(ClaimTypes.Name, userName),
               
}, "mock"));
userController.ControllerContext = new ControllerContext()
{
                 
    HttpContext = new DefaultHttpContext() { User = user }
};

但是,我收到以下错误。

Reference to type 'HttpContextBase' claims it is defined in 'System.Web', but it could not be found

我看到了一个类似的问题here,但是答案指向更改目标版本。我想知道是否有不改变目标版本的出路。

【问题讨论】:

    标签: c# asp.net .net-5


    【解决方案1】:

    终于设法解决了,把答案留给可能面临类似情况的人。

    我没有完全替换ControllerContext,而是替换了ControllerContext.HttpContext

    var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
    {
        new Claim(ClaimTypes.Name, userName),
                   
    }, "mock"));
    userController.ControllerContext.HttpContext = new DefaultHttpContext() { User = user };
    

    这确保了控制器可以接收用户名

    var userName = User.Identity.Name;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 2016-12-16
      • 2014-12-09
      • 1970-01-01
      • 2015-07-29
      相关资源
      最近更新 更多