首页 > 解决方案 > 如何在 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.
}

还有另一种方法可以做到这一点吗?

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

解决方案


试试这个代码

_controller.ControllerContext.HttpContext = new DefaultHttpContext();
_controller.ControllerContext.HttpContext.Request.Headers["X-Id1"] = "1";
_controller.ControllerContext.HttpContext.Request.Headers["X-Id2"] = "2";

推荐阅读