ASP.NET Core 集成测试中模拟登录用户的一种姿势
时间:2019-11-13
本文章向大家介绍ASP.NET Core 集成测试中模拟登录用户的一种姿势,主要包括ASP.NET Core 集成测试中模拟登录用户的一种姿势使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
不管哪种用户验证方式,最终都是在验证成功后设置 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); } }
这样就轻松搞定了。
原文地址:https://www.cnblogs.com/dudu/p/11838952.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 最全总结!聊聊 Python 调用 JS 的几种方式
- 爬取小说网站章节和小说语音播放
- JavaScript原型、原型链及原型链污染
- 报刊订阅管理系统的设计与实现
- 使用Pytest创建一个Python测试自动化项目
- 宾馆客房管理系统的设计与实现
- /leetcode 剑指 Offer 32 - I. 从上到下打印二叉树
- 使用Python和Chrome安装Selenium WebDriver
- 牛客网-从上到下打印二叉树
- leetcode 剑指 Offer 40. 最小的k个数
- 一文了解JDK12 13 14 GC调优秘籍-附PDF下载
- JVM系列之:String.intern和stringTable
- 5万字长文:Stream和Lambda表达式最佳实践-附PDF下载
- 实现浏览器中的最大请求并发数控制
- 【漏洞复现】Weblogic漏洞搭建与复现:CVE-2018-2894 任意文件上传