簡體   English   中英

DotNetOpenAuth使用者發布大型數據; “ Uri字符串太長”

[英]DotNetOpenAuth consumer POSTing large data; “The Uri string is too long”

相關: DotNetOpenAuth我需要在DotNetOpenAuth中在FetchResponseOpenId查詢長度問題中 發送長字符串 嗎? -但是這些都不能令人滿意地回答我的問題。

我們使用DotNetOpenAuth將數據發布到Xero,每個請求最多支持3MB 我們正在嘗試在requestBody發布一個77Kb的XML字符串:

Dictionary<string, string> additionalParams = new Dictionary<string, string>();
additionalParams.Add("xml",requestBody);

var endpoint = new MessageReceivingEndpoint(requestURL, HttpDeliveryMethods.PostRequest | HttpDeliveryMethods.AuthorizationHeaderRequest);
HttpWebRequest request = XeroConsumer.PrepareAuthorizedRequest(endpoint, accessToken, additionalParams);

WebResponse response = request.GetResponse();
string thisResponse = (new StreamReader(response.GetResponseStream())).ReadToEnd();

PrepareAuthorizedRequest拋出: Invalid URI: The Uri string is too long.

有什么方法可以使用DotNetOpenAuth發布“大”數據?

DotNetOpenAuth在其他參數上使用Uri.HexEscape()Uri.EscapeDataString() 當您的參數長度超過2Kb時,這會中斷。

我將它們的功能換成了我自己效率低下但可以正常工作的功能:

    internal static string EscapeUriDataStringRfc3986(string value)
    {
        StringBuilder escaped = new StringBuilder();

        string validChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-._~";

        foreach (char c in value)
        {
            if(validChars.Contains(c.ToString())){
                escaped.Append(c);
            } else {
                escaped.Append("%" + Convert.ToByte(c).ToString("x2").ToUpper());
            }
        }

        // Return the fully-RFC3986-escaped string.
        return escaped.ToString();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM