ASP.NET Core 集成测试中模拟登录用户的一种姿势
2024-10-20 03:48:56
不管哪种用户验证方式,最终都是在验证成功后设置 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);
}
}
这样就轻松搞定了。
最新文章
- SQL Server 系统数据库恢复
- Hello Point——WebGL
- nth-child() 选择器
- C语言register关键字—最快的关键字 ---------------转自http://blog.sina.com.cn/s/blog_6a1837e90101128k.html
- PHP变量名区分大小写,函数名不区分大小写
- Modernizr.js入门指南(HTML5&;CSS3浏览器兼容插件)
- Jquery获取第一个子元素
- scrollTop 值为 0
- (step6.3.4)hdu 1151(Air Raid——最小路径覆盖)
- Css 小技巧总结
- 百度ip定位城市接口调用
- JavaScript 初知
- cookie、locakstorage、sessionstorage的区别
- Informix存储过程
- GIT问题(一)——push冲突
- js实现table导出Excel,保留table样式
- C语言 &#183; 矩阵相乘 &#183; 算法提高
- Nginx反向代理服务器安装与配置
- CentOS 6.9安装docker之前升级系统内核版本
- Python镜像源
热门文章
- 配置Postman通过OAuth 2 implicit grant获取Dynamics 365 CE Online实例的Access Token
- Data Guard:Oracle 12c –新增和更新的功能 (Doc ID 1558256.1)
- CG-CTF SQL注入
- [洛谷P1373][题解]小a和uim之大逃离
- Java之Lambda表达式
- 【使用篇二】配置文件application.properties参数详解(21)
- Springcloud 中 SpringBoot 配置全集 (收藏版)
- java8-计算时间差的方法
- Python的生成器和生成器表达式
- Java中String直接赋字符串和new String的一些问题