[英]Utilizing Web API on client side
我在mvc4中创建了一个简单的Web api控制器,其中包含4个方法(每个CRUD操作一个)。 我可以使用提琴手来测试控制器中的方法是否正常工作。
我现在正在尝试进行单元测试,以证明这些功能有效。 我已经设法将客户端对象序列化为json格式,但是现在如何使用json字符串实际调用我的方法?
如果有帮助,我正在使用Json.NET序列化我的客户端对象-尽管我认为这种扩展实际上并不能处理将其传递到服务器或从服务器撤回的过程。
您应该针对控制器编写单元测试-因此,您无需发出实际的HTTP请求即可对Web API代码进行单元测试,只需调用方法即可。
从设计的角度来看,如果您想要一个宁静的Web API,则客户端应该能够发送标准的HTTP消息而不必序列化请求。
这是我用来将对象发布到静态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
如果响应预期为纯文本。
nick_w在此处显示的代码是正确的。 您需要使用HttpClient
对象。 正如史蒂夫·芬顿 ( Steve Fenton)所提到的那样,不想创建单元测试,而是直接针对控制器进行测试。 但是对于功能测试,您可以做到。 我做过同样的事情。 我已经创建了helper类,因此我只需要调用Http helper方法之一即可,这取决于我执行的是GET还是POST等。 该帮助程序使用通用类型,因此可以与传递的任何类型一起使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.