【问题标题】:Utilizing Web API on client side在客户端使用 Web API
【发布时间】:2012-11-14 19:48:34
【问题描述】:

我在 mvc4 中创建了一个简单的 web api 控制器,其中包含 4 个方法(每个 CRUD 操作一个)。我可以使用 fiddler 来测试我的控制器中的方法是否有效。

我现在正在尝试进行单元测试来证明这些工作。我已经设法将我的客户端对象序列化为 json 格式,但现在如何使用这个 json 字符串来实际调用我的方法?

如果有帮助,我将使用 Json.NET 序列化我的客户端对象 - 尽管我认为这个扩展实际上并没有处理它到服务器的传递和检索。

【问题讨论】:

    标签: c# asp.net json asp.net-web-api json.net


    【解决方案1】:

    您的单元测试应该针对控制器编写 - 因此您不需要发出实际的 HTTP 请求来对您的 Web API 代码进行单元测试,您只需调用方法即可。

    从设计的角度来看,如果你想要一个 RESTful Web API,客户端应该能够发送标准的 HTTP 消息,而无需序列化请求。

    【讨论】:

    • 谢谢史蒂夫。这是我最初所做的,它似乎工作正常,但我不确定它是否足以测试“客户端”的使用。另外,我不太清楚您所说的客户端不必序列化请求是什么意思。
    • 我明白了 - 你可以编写集成测试,但实际上你测试的 Web API 框架比你的代码更多。这并不是说集成测试没有价值——但您可能不想进行太多测试。您可以使用任何可以发出 HTTP 请求的东西来测试 Web API。
    【解决方案2】:

    这是我用来将对象发布到 RESTful Web API 的一种方法:

    HttpResponseMessage response;
    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("http://url_to_service");
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    
    var responseTask = client.PostAsJsonAsync("api/resource/somethingelse", someObjectToPost).Result;
    responseTask.Wait();
    response = responseTask.Result;
    
    if (response.IsSuccessStatusCode)
    {
        var contentTask = response.Content.ReadAsAsync<SomeResponseType>();
        contentTask.Wait();
        SomeResponseType responseContent = contentTask.Result;
    }
    else
    {
        //Handle error.
    }
    

    在这种情况下,someObjectToPost 是您的客户端对象,尽管您可以将它留给 Web API 来为您序列化它。在上面的示例中,我假设响应是虚构类型 SomeResponseType - 如果响应预计是纯文本,您也可以使用 ReadAsStringAsync

    【讨论】:

      【解决方案3】:

      nick_w 提供的代码是正确的。您需要使用HttpClient 对象。正如 Steve Fenton 所提到的,要创建单元测试,您不想这样做 - 而是直接针对控制器进行测试。但是对于功能测试,您可以做到。我做过同样的事情。我已经创建了辅助类,所以我只需要调用 Http 辅助方法之一,这取决于我所做的是 GET 还是 POST 等。此帮助器使用泛型类型,因此它可以处理任何传递的类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-24
        • 2016-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多