0

単一の GET アクションで ASP.NET MVC4 Web API サービス (REST) を作成しました。このアクションには現在 11 個の入力値が必要なので、これらの値をすべて URL で渡すのではなく、それらの値を 1 つのクラス タイプにカプセル化し、Content-Body として渡すことにしました。Fiddler でテストするときは、動詞を GET として指定し、[要求本文] 入力ボックスに JSON テキストを入力します。これはうまくいきます!

問題は、Visual Studio 2010 Ultimate で負荷テストを実行しようとしたときです。GET アクションと JSON Content-Body を問題なく指定できます。しかし、負荷テストを実行すると、VS はテスト結果でタイプ ProtocolViolationException (この動詞タイプのコンテンツ本文を送信できません) の例外を報告します。テストは 1 ミリ秒で実行されるため、例外が原因でテストがすぐに中止されると思われます。これらの例外を回避するにはどうすればよいですか? テスト ツールを回避するためだけに、URL 引数を使用するように API を変更したくありません。他の理由で API を変更する必要がある場合は、お知らせください。ありがとう!

4

1 に答える 1

0

議論を続けるよりも、この答えを出す方が簡単だと思いました。

を使用したコンテンツの送信GETは RFC 2616 では定義されていませんが、禁止されていません。したがって、仕様に関する限り、私たちは判断を下さなければならない領域にいます.

GETリソースを取得するために標準的に使用されます。したがって、送信するパラメーターを指定してこの動詞を使用して、このリソースを取得しています。安全で冪等であるためGET、キャッシュに最適です。キャッシングは通常、リソース URI に基づいて行われますが、さまざまなヘッダーに基づいて行われることもあります。ポイントは、キャッシュの実装です-AFAIK-はGETコンテンツを使用しません(そして、正直なところ、現実の世界でコンテンツを使用したGETを見たことがありません)。また、キャッシュのスケーラビリティが低下するため、キー生成にコンテンツを含めることは意味がありません。

送信するパラメータがある場合、これは URI を定義するものの一部であるため、それらは URI に含まれている必要があります。そのため、GET でコンテンツを送信することは間違っていると強く信じています。

OData などの実装を見ても、条件を URI に入れています。あなたの (または任意の) アプリケーション要件が OData クエリの要件を超えているとは思えません。

于 2012-07-21T09:58:04.730 に答える