POSTを使用すると、ServiceStackJsonクライアントが結果を逆シリアル化しないという問題が発生します。getメソッドは、応答をUserCredentialsオブジェクトに逆シリアル化することに問題はありませんが、POSTメソッドを使用すると、すべてnullプロパティを持つオブジェクトが返されます。Postメソッドに渡されるタイプをディクショナリに変更すると、正しい結果が得られていることがわかり、残りの呼び出しがFiddlerからのhttpレベルで成功していることがわかります。
public UserCredentials Login(string uname, string pwd)
{
var url = "/login";
//note that I have to send a dictionary because if I sent a Login Object with username and password it erronously sends {Login:} in the raw request body instead of {"Uname":uname, "Password":password}
var login = new Dictionary<string, string>() { { "Uname", uname }, { "Password", pwd } };
var result = client.Post<UserCredentials>(url, login);
return result;
}
これが応答です(これはサーバーからの正しい予想されるhttp応答です)
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 14 Mar 2013 12:55:33 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Length: 49
{"Uid":1,"Hash":"SomeHash"}
そしてこれがUserCredentialsクラスです
public class UserCredentials
{
public long Uid;
public string Hash;
}