1

Webサービスの使用で奇妙な問題が発生しました:

クライアントとして、「type-content」ヘッダーを設定せずにフォームをREST WebサービスにPOSTすると、問題なく動作します。サーバーで電話がかかってきて、Jsonテキストが利用可能になりました。

クライアントとして、POSTリクエストのcontent-typeヘッダーを「application / json」に設定すると、サーバーは「Bad Request(400)」で応答します。

Webサービスの方法は次のとおりです。

 <WebInvoke(UriTemplate:="Login", Method:="POST")>
 Public Function LoginFormAccess(data As IO.Stream) As String
 (...)
 end function

「Application/Json」について言及しない場合は、データストリームに投稿されたクライアントのjsonタイプの本文を取得できます。そうした場合、BadRequestの回答が得られます。

コンテンツタイプの値に関して、なぜこれほど大きな動作の違いがあり、何がそのような違いを提供するのでしょうか。メソッドに別のタイプのパラメーターが必要ですか、それとも他の何かを変更またはチェックする必要がありますか?

追加:コンテンツタイプが「Application / JSON」で、本文が空の場合、機能します...!

  • 注1:通話に応答するクラスインスタンス化されます。(new()のトレースはそれを証明します)。したがって、問題は、サーバーがそのオブジェクトを呼び出すための適切なメソッドを見つけられないことであるようです...

  • 注2:さまざまなクライアントを使用してこの問題が発生したため、サーバー側の問題であると確信しています。

  • 注3:WCFRESTサービスアプリケーションテンプレートを使用してプロジェクトを作成しました。

  • 注4:「ResponseFormat=WebMessageFormat.Json」および「RequestFormat=WebMessageFormat.Json」に言及しても役に立ちません。

4

1 に答える 1

1

リクエストcontent-typeにヘッダーを追加すると、返されると予想されるコンテンツではなく、リクエスト内のデータのコンテンツ タイプを指定することになります。

あなたが投稿したことからの私の賭けは、XML をサービスに投稿しているということですcontent-type。JSON に設定すると、サーバーの本文を解析する能力が損なわれます。「コンテンツタイプが「Application/Json」であり、本文が空の場合」が機能するというあいまいな声明は、これを裏付ける可能性があります(応答ではなく、要求の本文を意味すると仮定します)。

これは、JSON の代わりに XML のコンテンツ タイプを追加することで証明できます。これは、リクエストの実際の本文と一致する場合、問題なく機能します。

つまり、リクエストが JSON コンテンツを指定しており、JSON を送信していないため、「Bad Request」エラーが発生しています。

于 2012-08-02T15:01:03.710 に答える