Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 从webapi2.1标头检索数据的正确方法_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

Asp.net mvc 从webapi2.1标头检索数据的正确方法

Asp.net mvc 从webapi2.1标头检索数据的正确方法,asp.net-mvc,asp.net-web-api,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")) {

我已经创建了一个基本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
正确返回头,以便进行单元测试。然而,如果我问自己这个方法是否属于控制器,答案是否定的,不管是否希望进行单元测试。如果要这样做,我宁愿为
HttpRequestMessage
创建一个扩展方法。扩展方法只是一种语法糖,但它基本上是一种静态助手方法,我可以在任何地方使用扩展方法—控制器、消息处理程序、过滤器等等。然后,如果我愿意,我可以进行单元测试