正确的方法从webapi2.1标头中检索数据

时间:2014-02-17 04:52:20

标签: asp.net-mvc asp.net-web-api

我创建了一个基本api控制器,允许我从标题中访问数据。

  public virtual int GetHeaderData()
    {
        if (Request != null)
        {
            var headers = Request.Headers;
            int customValue;
            if (headers.Contains("mycustomvalue"))
            {
                int.TryParse(headers.GetValues("mycustomvalue").First(), out customValue);
                return customValue;
            }
        }
        throw new Exception();
    }

所以从任何控制器调用这个都很容易,例如GetHeaderData()

然而,对我来说,单元测试似乎非常困难,因为助手需要

  

Request.Headers

我真的应该尝试在控制器级别读取标头值,还是应该在其他地方执行此操作,以便更容易测试?

我正在寻找一些关于我应该做的最好方法的建议。

谢谢

1 个答案:

答案 0 :(得分:0)

我不会到目前为止称这是一个建议,但只是建议你考虑。首先,单元测试不应该决定你的课堂设计。可以在控制器级别设置请求对象,以便Request.Headers正确返回标题以供您进行单元测试。但是,如果我问自己问题这个方法是否属于控制器,答案是否定的,无论是否需要进行单元测试。如果我这样做,我宁愿为HttpRequestMessage创建一个扩展方法。扩展方法只是语法糖,但它基本上是一个静态辅助方法,我可以在任何地方使用扩展方法 - 控制器,消息处理程序,过滤器等。然后,如果我愿意,我可以进行单元测试。