簡體   English   中英

如何將 HttpWebResponse 實現轉換為 HttpClient

[英]How to convert HttpWebResponse impelmentation to HttpClient

我有一種服務方法,它使用HttpWebRequest來處理以下內容

while (ub < sentCount)
{
    ub = step * (1 + (i++));

    var k = (ub > sentCount) ? (sentCount) : ub; //to avoid array out of range exception(assign unitll array length if calc exceeds)

    for (int j = lb; j < k; j++)
    {
        pnos = pnos + "," + pnosList[j].Phone;
    }
    pnos = pnos.Substring(1);

    var sbPostData = new StringBuilder();
    sbPostData.AppendFormat("authkey={0}", api.AuthenticationKey);
    sbPostData.AppendFormat("&mobiles={0}", pnos);
    sbPostData.AppendFormat("&message={0}", message);
    sbPostData.AppendFormat("&sender={0}", api.SenderId);
    sbPostData.AppendFormat("&route={0}", "default");
    string sendSMSUri = api.EndPoint;


    // Create HTTPWebrequest
    var httpWReq = (HttpWebRequest)WebRequest.Create(sendSMSUri);
    //Prepare and Add URL Encoded data
    var encoding = new UTF8Encoding();
    byte[] data = encoding.GetBytes(sbPostData.ToString());
    //Specify post method
    httpWReq.Method = "POST";
    httpWReq.ContentType = "application/x-www-form-urlencoded";
    //httpWReq.ContentLength = data.Length;
    using (Stream stream = httpWReq.GetRequestStream())
    {
        stream.Write(data, 0, data.Length);
    }
    //Get the response
    var response = (HttpWebResponse)httpWReq.GetResponse();
    var reader = new StreamReader(response.GetResponseStream());
    string responseString = reader.ReadToEnd();

    //Close the response
    reader.Close();
    response.Close();

    lb = ub;
    pnos = string.Empty;
}

現在我需要在HttpClient做同樣的事情是有可能做到的。 我面臨的問題是 PCL(C# 類庫)中不支持HttpWebRequest我想將上述邏輯移至 PCL。

簡短的回答是肯定的!

這是一個可能的實現:

while (ub < sentCount)
{
    ub = step * (1 + (i++));

    var k = (ub > sentCount) ? (sentCount) : ub; //to avoid array out of range exception(assign unitll array length if calc exceeds)

    for (int j = lb; j < k; j++)
    {
        pnos = pnos + "," + pnosList[j].Phone;
    }
    pnos = pnos.Substring(1);

    var postData = new List<KeyValuePair<string, string>>();
    postData.Add(new KeyValuePair<string, string>("authkey", api.AuthenticationKey));
    postData.Add(new KeyValuePair<string, string>("mobiles", pnos));
    postData.Add(new KeyValuePair<string, string>("message", message));
    postData.Add(new KeyValuePair<string, string>("sender", api.SenderId));
    postData.Add(new KeyValuePair<string, string>("route", "default"));
    string sendSMSUri = api.EndPoint;

    using (var httpClient = new HttpClient())
    {
        var request = new HttpRequestMessage(HttpMethod.Post, sendSMSUri) { Content = new FormUrlEncodedContent(postData) };
        var response = await httpClient.SendAsync(request).ConfigureAwait(false);
        response.EnsureSuccessStatusCode();
        var responseString = await response.Content.ReadAsStringAsync();
        // do your stuff
    }

    lb = ub;
    pnos = string.Empty;
}

暫無
暫無

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

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