c# - 如何在 API 控制器的集成测试中添加请求标头
问题描述
我正在为需要在请求中自定义标头信息的 API 控制器创建集成测试。
控制器
public IActionResult Delete([FromQuery] string param1, [FromQuery] string param2)
{
…
var id = Request.Headers["X-Id1"].ToString();
var id2 = Request.Headers["X-Id2"].ToString();
…
}
如何在集成测试中添加此请求标头?我被困在下面的代码中,因为_controller.ControllerContext
它是类型ControllerContext
,我无法将HttpControllerContext
对象转换为它。错误信息是Cannot implicitly convert type 'System.Web.Http.Controllers.HttpControllerContext' to 'Microsoft.AspNetCore.Mvc.ControllerContext'
集成测试
[TestMethod]
public void Test()
{
var request = new HttpRequestMessage();
request.Headers.Add("X-Id1", "1");
request.Headers.Add("X-Id2", "2");
var controllerContext = new HttpControllerContext();
controllerContext.Request = request;
_controller.ControllerContext = controllerContext; // Error message shows here.
_controller.Delete("a", "b");
// Assertion here.
}
还有另一种方法可以做到这一点吗?
解决方案
试试这个代码
_controller.ControllerContext.HttpContext = new DefaultHttpContext();
_controller.ControllerContext.HttpContext.Request.Headers["X-Id1"] = "1";
_controller.ControllerContext.HttpContext.Request.Headers["X-Id2"] = "2";
推荐阅读
- gremlin - Gremlin 控制台 addV 似乎没有添加顶点
- websocket - Flutter 用 dart 实现 socket.io
- c - c语言%f变量,f在数字后面
- scala - 从地图到 csv scala 的优雅方式(展平地图)
- arrays - Powershell 批处理文件中的结构化数组增加了额外的空间
- node.js - 将值“{ _id: 5bd587cffb6fc074abb12cb8,\n name: \'name 2\',\n year: \'4\',\n id: \'102\' }”转换为字符串失败,路径为“winner”
- python - ValueError:形状(831,18)和(1629,2)未对齐:18(dim 1)!= 1629(dim 0)
- emacs - 将文件写入新目录后,ido模式打开错误目录
- docker - 在 Kitematic (Docker for Mac) 中更改了 SA 密码,我丢失了 localhost 中的所有数据库
- javascript - Javascript:条件函数onClick按钮