C# 在TestServer中调用OWS上的HTTP PUT
我一直在尝试使用OWIN TestServer类实现集成测试,除了PUT或DELETE方法的实现之外,其他一切都可以正常工作。POST方法代码(有效)如下所示:C# 在TestServer中调用OWS上的HTTP PUT,c#,rest,integration-testing,owin,httpverbs,C#,Rest,Integration Testing,Owin,Httpverbs,我一直在尝试使用OWIN TestServer类实现集成测试,除了PUT或DELETE方法的实现之外,其他一切都可以正常工作。POST方法代码(有效)如下所示: using (var server = TestServer.Create<Startup>()) { var response = await server.CreateRequest(uri) .AddHeader("Authorization", "Bearer " + _token)
using (var server = TestServer.Create<Startup>())
{
var response = await server.CreateRequest(uri)
.AddHeader("Authorization", "Bearer " + _token)
.And(
request =>
request.Content =
new ObjectContent(typeof (T), command, new JsonMediaTypeFormatter()))
.PostAsync();
Assert.AreEqual(response.StatusCode, expectedStatusCode);
return await response.Content.ReadAsStringAsync();
}
使用(var server=TestServer.Create())
{
var response=wait server.CreateRequest(uri)
.AddHeader(“授权”、“承载人”+_令牌)
.及(
请求=>
请求.内容=
新的ObjectContent(typeof(T)、命令、新的JsonMediaTypeFormatter())
.PostAsync();
Assert.AreEqual(response.StatusCode,expectedStatusCode);
return wait response.Content.ReadAsStringAsync();
}
要执行PUT请求,我尝试了以下两种方法:
using (var server = TestServer.Create<Startup>())
{
var response = await server.CreateRequest(uri)
.AddHeader("Authorization", "Bearer " + _token)
.And(
request =>
request.Content =
new ObjectContent(typeof (T), command, new JsonMediaTypeFormatter()))
.And(request => request.Method = = HttpMethod.Put)
.PostAsync();
Assert.AreEqual(response.StatusCode, expectedStatusCode);
return await response.Content.ReadAsStringAsync();
}
使用(var server=TestServer.Create())
{
var response=wait server.CreateRequest(uri)
.AddHeader(“授权”、“承载人”+_令牌)
.及(
请求=>
请求.内容=
新的ObjectContent(typeof(T)、命令、新的JsonMediaTypeFormatter())
和(请求=>request.Method==HttpMethod.Put)
.PostAsync();
Assert.AreEqual(response.StatusCode,expectedStatusCode);
return wait response.Content.ReadAsStringAsync();
}
及
使用(var server=TestServer.Create())
{
var response=wait server.CreateRequest(uri)
.AddHeader(“授权”、“承载人”+_令牌)
.及(
请求=>
请求.内容=
新的ObjectContent(typeof(T)、命令、新的JsonMediaTypeFormatter())
和(请求=>request.Method==HttpMethod.Put)
.SendAsync(“PUT”);
Assert.AreEqual(response.StatusCode,expectedStatusCode);
return wait response.Content.ReadAsStringAsync();
}
sendsync(“PUT”)作为不受支持的方法返回。该参数不是可选的。PostAsync方法忽略了HTTPMethod.Put,仍然尝试使用POST动词
除了POST和GET之外,我如何使用这些动词和其他动词?实际上,我在问了这个问题几分钟后发现了这个问题。这个问题最终变成了路线问题。通过仔细查看响应,我能够确定“405-方法不允许”与调用的格式无关,而是我的路由不正确 对于其他任何浏览者,正确的语法应该是sendsync(“PUT”)。和(request=>request.Method==HttpMethod.Put)甚至都不是必需的
using (var server = TestServer.Create<Startup>())
{
var response = await server.CreateRequest(uri)
.AddHeader("Authorization", "Bearer " + _token)
.And(
request =>
request.Content =
new ObjectContent(typeof (T), command, new JsonMediaTypeFormatter()))
.And(request => request.Method = = HttpMethod.Put)
.SendAsync("PUT");
Assert.AreEqual(response.StatusCode, expectedStatusCode);
return await response.Content.ReadAsStringAsync();
}