2012-02-24 20 views
2

Requestボディがないと、メソッド呼び出しは成功します。リクエスト本体の下で使用すると、HTTP/1.1 400 Bad Requestが発生します。下の質問体に明らかな問題がありますか?ここでFiddler2のPOST BodyのBodyのリクエスト

リクエストボディ

{ 
    "_userConfigData":{"UserName":"bXZpbmphbXVyaQ==", "FirstName":"User1", "LastName":"Last1", "ContactInfo":"None" }, 
    "_configResult": "Miscellaneous" 
} 

リクエストヘッダ

User-Agent: Fiddler 
Content-Type: application/json 
Host: localhost:1706 
Content-Length: 167 

サーバ側のメソッドである:ここで

[OperationContract] 
[WebInvoke(UriTemplate = "UpdateUserDetails/?_clientIP={_clientIP}&AdminName={AdminName}", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)] 
public void UpdateUserDetails(UserConfigData _userConfigData, ConfigResult _configResult, string _clientIP, string AdminName) 
{ 
    // 
} 

は、私がFiddler2をして使用するURLです:

http://localhost:1706/WCF/UserConfig/UserConfigService.svc/UpdateUserDetails?_clientIP=localhost&AdminName=admin

おかげで、

+0

ええと、jsonのデータとPOSTヘッダーがうまく見えます。可能であれば、サーバコードをデバッグして、なぜそれが400を返すのか調べてください。 –

+0

上記のアップデートをご覧ください。リクエストボディがFiddler2に存在する場合、コントロールはこのメソッドには到着しません。しかし、NO Request Bodyの場合、コントロールはこのメソッドになります。 – codematrix

+0

あなたはFiddlerに与えているURLは何ですか? –

答えて

3

は私が動作するようにあなたのコードを取得することができましたが、私はいくつかの変更をしなければなりませんでした。

  1. クエリ文字列によって運ばれるデータを本文に移動する必要がありました。それ以外の場合は動作しませんでした。
  2. BodyStyle Wrapedオプションを削除する必要がありました。とにかく

は、ここにあなたのデータで更新されたモデルのオブジェクトである:

public class UserConfigData 
{ 
    public string UserName { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string ContactInfo { get; set; } 
} 

public class Result 
{ 
    public UserConfigData UserConfigData { get; set; } 
    public string ConfigResult { get; set; } 
    public string ClientIp { get; set; } 
    public string AdminName { get; set; } 
} 

サーバ側のメソッド:

[WebInvoke(UriTemplate = "UpdateUserDetails", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] 
public void UpdateUserDetails(Result result) 
{ 
    // 
} 

お渡しJSON:

{ 
    "AdminName":"String content", 
    "ClientIp":"String content", 
    "ConfigResult":"String content", 
    "UserConfigData":{ 
     "ContactInfo":"String content", 
     "FirstName":"String content", 
     "LastName":"String content", 
     "UserName":"String content" 
    } 
} 

更新日: Fiddlerリクエストのスクリーンショット: Fiddler request screen shot

、要求がサーバUpdateUserDetails()ハンドラを取得します。 UpdateUserDetails

+0

これらの変更でも同じ問題が発生しています。 Fiddler2 Request Bodyで使用しているJSONを私に提供してください。 – codematrix

+0

私はすでに私の答えでそれらを貼り付けました。私はそれを試して、それは私のために正常に動作します。いくつかのスクリーンショットを投稿させてください –

6

私は上記の投稿のように私のサービスを変更し、私が設けられた第一のスクリーンショットに気づいまで、それは動作しませんでした。シオマネキヘッダーでライン

のContent-Typeである:アプリケーション/ JSONこれは私がサービスにデータを送信することを許可さ

。戻り値の型を文字列に変更した後、生データを返すことができました。

関連する問題