3

以下に示すように、WCFRESTサービスを呼び出そうとしています。

[WebInvoke(UriTemplate = "Login", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public string Process(string AuthenticationInfo)
{

以下のFiddler2で以下を使用して呼び出しようとしています。

User-Agent: Fiddler
Host: localhost
content-type: application/json;charset=utf-8
content-length: 0
data: {"AuthenticationInfo": "data"}

メソッドにブレークポイントがあり、ブレークポイントにヒットしますが、AuthenticationInfoの値は常にnullであり、「データ」ではありません。

私は何が間違っているのですか?

ありがとう。

4

3 に答える 3

3

属性のデフォルトの「ボディスタイル」[WebInvoke]は「ベア」です。これは、入力(この場合は"data")を「そのまま」送信する必要があることを意味します。送信するのは、入力のラップされたバージョンです(つまり、キーがパラメーター名であるオブジェクトにラップされています。

WebInvokeこれを機能させるには、2つの方法があります。BodyStyleパラメーターを含めるように宣言を変更するか、次のようにします。

[WebInvoke(
    UriTemplate = "Login", 
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public string Process(string AuthenticationInfo)   

または、パラメータ「bare」を送信するようにリクエストを変更できます。

POST .../Login HTTP/1.1
User-Agent: Fiddler
Host: localhost
Content-Type: application/json;charset=utf-8
Content-Length: 6

"data"
于 2012-04-24T03:11:16.280 に答える
1

Fiddler で HTTP メソッドを POST に設定していますか? Method="GET"デフォルトでは、WCF REST 操作は POST です。get を実行する場合は、WebInvoke属性を設定する必要があります。ところで、あなたの場合、データを送信しているのでGETは意味がないと思うので、FiddlerでPOSTを使用していることを確認してください。

于 2012-04-24T02:39:49.470 に答える
0

Content-Length を 0 として送信しますが、それは POST-Data の長さでなければなりません。

于 2012-06-29T13:26:37.917 に答える