2

我一直在尝试使用 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();
}

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

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

SendAsync( " PUT")作为不受支持的方法返回。该参数不是可选的。PostAsync方法忽略HTTPMethod.Put仍然尝试 POST 动词。

除了 POST 和 GET 之外,我如何使用这些动词和其他动词?

4

1 回答 1

7

事实上,我在提出这个问题后几分钟就发现了问题。问题最终成为路线问​​题。通过仔细查看响应,我能够确定“405 - Method Not Allowed”与调用的格式无关,而是我的路由不正确。

对于其他浏览者,正确的语法只是SendAsync("PUT")。.And (request => request.Method = = HttpMethod.Put)甚至没有必要......

于 2015-12-17T19:14:26.607 回答