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 に答える