HttpControllerContext.Request和HttpContext.Current.Request之间的区别

时间:2015-07-16 09:08:59

标签: c# unit-testing httpcontext request-headers asp.net-apicontroller

我只想尝试单位测试我的自定义ApiController。在我的自定义控制器中,我覆盖Initialize方法来评估授权标题。

所以我的问题是,我有2个请求标题可用。

protected override void Initialize(HttpControllerContext controllerContext)
{
    base.Initialize(controllerContext);
    // Headers 1
    var headersOne = controllerContext.Request.Headers;
    // Headers 2
    var headersTwo = HttpContext.Current.Request.Headers;
}

但这不是问题本身。问题是,标题不匹配。因此,对于高效运营:我在哪里必须寻找授权标题。我在哪里必须为我的测试场景应用我的授权标题。

目前我将授权标题应用于controllerContext

var fakeControllerContext = new HttpControllerContext
{
    Request = new HttpRequestMessage
    {
        RequestUri = new Uri("http://localhost/api/test"),
        Headers =
        {
            { "Authorization", "Fake Authorization-Header"}
        }
    }
};

但正如我已经说过的那样。该标头稍后在HttpContext.Current.Request.Headers中不可用。 你能帮帮我吗?不幸的是,我并不完全明白哪个环境符合目的。

1 个答案:

答案 0 :(得分:0)

我现在发现的是HttpContext.Current是一个旧的实现,不应该再使用了。因为你无法控制它的内容来进行单元测试。

HttpControllerContext只是较新的实现。而且它的内容也是可以交换的。提交的方法初始化的controllerContext在ControllerContext - 属性中可用。所以你应该使用它。

在第一个回答中找到了这个: Testing a Web API method that uses HttpContext.Current.Request.Files? 感谢:Martin Liversage