C# 在TestServer中调用OWS上的HTTP PUT

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)

我一直在尝试使用OWIN TestServer类实现集成测试,除了PUT或DELETE方法的实现之外,其他一切都可以正常工作。POST方法代码(有效)如下所示:

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();
}