0

RestSharp を使用して MVC エントリ ポイントへの Rest アクセスを構築しています (実際にはモノタッチから使用できるようになっていますが、現在は Windows 7、vs2010、.net 4、RestSharp 104.1 でテストしています)。

リクエストを作成して呼び出すと

client.ExecuteAsPost<Model.Client>( request );

それは動作します、フィドラーで生のパケットを見ることができます

POST http://localhost.:49165/Services/Client/ClientAdminService/FindClient HTTP/1.1 
Timestamp: Monday, March 18, 2013 1:56:02 AM 
X-PS-Authentication: YADAYADA:<deleted for brevity>== 
Accept: application/xml 
User-Agent: RestSharp 104.1.0.0 
Content-Type: application/xml; charset=utf-8 
Host: localhost.:49165 
Content-Length: 256 
Accept-Encoding: gzip, deflate 
Connection: Keep-Alive


<Client xmlns="http://schemas.datacontract.org/2004/07/PSRMWebService.Model.Version1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><ID>0</ID><MailingAddress i:nil="true"/><Mask>Name</Mask><Name>Rykercom</Name><PhysicalAddress i:nil="true"/></Client>

ご覧のとおり、最後にサーバーに送信する必要があるシリアル化されたデータ blob (Model.Client 型) があり、これは次を使用してリクエストに追加されます。

Request.AddParameter("application/xml; charset=utf-8", DataPacket, RestSharp.ParameterType.RequestBody);

ここで、DataPacket は、DataContractSerializer を使用して作成されたシリアル化された BLOB です。

コードを変更して呼び出すと

Client.ExecuteAsyncPost<Model.Client>(Request, (response, handle) => { OnFindClientAsyncComplete(response, handle, Callback ); }, "POST");

Fiddler を使用すると、ボディもコンテンツ タイプもないまったく異なるパケットが得られるため、サーバーからの応答が失敗します。

POST http://localhost.:49165/Services/Client/ClientAdminService/FindClient HTTP/1.1
Timestamp: Monday, March 18, 2013 2:35:08 AM
X-PS-Authentication: YADAYADA:<deleted for bevity>==
Accept: application/xml
User-Agent: RestSharp 104.1.0.0
Host: localhost.:49165
Content-Length: 0
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

X-PS-Authentication は単なるカスタム認証文字列です。非同期呼び出しで空のメッセージ本文が残される理由は誰にでもありますか?

4

1 に答える 1

0

簡単な答えは、現在のgithubリポジトリのクローンを作成して、残りをシャープにし、自分でビルドすることです。executeasyncの修正はすでにツリーに含まれているようです。

Nugetパッケージを所有している人が、最新のソースに更新できる可能性はありますか?

ありがとう

于 2013-03-19T00:17:17.717 に答える