1

オンライン取引 REST API に対して OAuth 1.0a リクエストを作成しています。私が知る限り、次のコードはリクエストを行う方法ですが、「このプロパティは、書き込みが開始された後は設定できません」というメッセージが表示されrequest.ContentLength = postData.Length;ます...理由がわかりません。これが、送信前に OAuth 認証済み Web リクエストに POST データを追加する方法でない場合、何ですか?

var request = consumer.PrepareAuthorizedRequest(new DotNetOpenAuth.Messaging.MessageReceivingEndpoint(new Uri(this.EndPointAddress, relativeUri), method), this.AccessToken);
request.Method = (method == DotNetOpenAuth.Messaging.HttpDeliveryMethods.PostRequest) ? "POST" : "GET";
if (postValues != null && postValues.Count > 0)
{
    //There is POST data associated with this request, include it
    var postData = KVPCollectionToString(postValues);
    request.ServicePoint.Expect100Continue = false;
    request.ContentLength = postData.Length;
    Logger.Trace(t => t("POST Data: {0}", postData));
    using (var stream = request.GetRequestStream())
    {
        var pBytes = System.Text.Encoding.UTF8.GetBytes(postData);
        stream.Write(pBytes, 0, pBytes.Length);
    }
}
4

2 に答える 2

3

簡単な回答: OAuth リクエストで追加情報を渡したい場合は、他のオーバーロードの 1 つを に使用する必要がありますPrepareAuthorizedRequest。リクエストに追加される POST パラメータのリストをメソッドに提供できます。

より長い答え:

PrepareAuthorizedRequestメソッドは、返信を受け取る前にリクエストに書き込みますHttpWebRequest。これは、その後コンテンツの長さを変更できないことを意味します。

これを自分の目で確かめるには、DotNotOpenAuth ソース コードを掘り下げることができます。Channelクラスを見ると、PrepareAuthorizedRequest呼び出しにパラメーターが与えられている場合、最終的には になりますChannel.InitializeRequestAsPost。ここで 2 つのことがわかります。

  • メソッドを POST に設定する必要はありません。DotNetOpenAuth がこれを行います。
  • PrepareAuthorizedRequestリクエストでパラメーターを提供するには、名前と値のペアの辞書を取る他のオーバーロードのいずれかを使用してパラメーターを渡す必要があります。
于 2013-02-22T01:47:29.853 に答える
0

応答文字列ではなく要求ストリームに書き込もうとしているように見えます。応答のみの要求を変更することはできません。

于 2013-02-22T01:32:26.800 に答える