Как преобразовать имплементацию HttpWebResponse в HttpClient - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть один метод обслуживания, который использует 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, это возможно сделать. Проблема, с которой я сталкиваюсь: HttpWebRequest не поддерживается в PCL (библиотека классов C #). Я хочу перейти над логикой в ​​PCL.

1 Ответ

0 голосов
/ 06 ноября 2018

Короткий ответ - да!

Вот возможная реализация:

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;
}
...