不管哪种用户验证方式,最终都是在验证成功后设置 HttpContext.User ,后续处理环节通过 HttpContext.User 获取用户信息。如果能直接修改 HttpContext.User ,就能达到模拟登录的目的,而 ASP.NET Core 的中间件(middleware)天生具备的可以任意修改 HttpContext 的能力,让实现这个想法不费吹灰之力。

首先实现一个模拟登录用户并修改 HttpContext.User 的中间件。

app.Use(async (context, next) =>
{
var claims = new Claim[] { new Claim(ClaimTypes.Name, "cnblogs") };
var claimsIdentity = new ClaimsIdentity(claims, "Basic");
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
context.User = claimsPrincipal;
await next();
});

然后通过 IStartupFilter 注册上面的中间件,这样可以确保它先于 Startup.Configure 中注册的中间件。

public class FakeUserStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return app =>
{
//app.Use(...);
next(app);
};
}
}

最后通过重写 WebApplicationFactory 的 ConfigureWebHost 方法注册 IStartupFilter 的实现。

public class StoreWebAppFactory : WebApplicationFactory<Startup>
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureServices(services =>
{
services.AddTransient<IStartupFilter, FakeUserStartupFilter>();
}); base.ConfigureWebHost(builder);
}
}

这样就轻松搞定了。

最新文章

  1. SQL Server 系统数据库恢复
  2. Hello Point——WebGL
  3. nth-child() 选择器
  4. C语言register关键字—最快的关键字 ---------------转自http://blog.sina.com.cn/s/blog_6a1837e90101128k.html
  5. PHP变量名区分大小写,函数名不区分大小写
  6. Modernizr.js入门指南(HTML5&amp;CSS3浏览器兼容插件)
  7. Jquery获取第一个子元素
  8. scrollTop 值为 0
  9. (step6.3.4)hdu 1151(Air Raid——最小路径覆盖)
  10. Css 小技巧总结
  11. 百度ip定位城市接口调用
  12. JavaScript 初知
  13. cookie、locakstorage、sessionstorage的区别
  14. Informix存储过程
  15. GIT问题(一)——push冲突
  16. js实现table导出Excel,保留table样式
  17. C语言 &#183; 矩阵相乘 &#183; 算法提高
  18. Nginx反向代理服务器安装与配置
  19. CentOS 6.9安装docker之前升级系统内核版本
  20. Python镜像源

热门文章

  1. 配置Postman通过OAuth 2 implicit grant获取Dynamics 365 CE Online实例的Access Token
  2. Data Guard:Oracle 12c –新增和更新的功能 (Doc ID 1558256.1)
  3. CG-CTF SQL注入
  4. [洛谷P1373][题解]小a和uim之大逃离
  5. Java之Lambda表达式
  6. 【使用篇二】配置文件application.properties参数详解(21)
  7. Springcloud 中 SpringBoot 配置全集 (收藏版)
  8. java8-计算时间差的方法
  9. Python的生成器和生成器表达式
  10. Java中String直接赋字符串和new String的一些问题