Обратная связь и, возможно, лучший метод для моих запросов на получение и публикацию в C # с использованием httpclient - PullRequest
0 голосов
/ 19 ноября 2018

Немного обеспокоен тем, как я это делаю, и хотел получить отзыв о лучшем способе.

Вот код, который я написал для публикации на веб-сайте, я также покажу запрос на получение.

Итак, при условии, что вам не нужно видеть, когда мы создаем HttpClient, CookieContainer и ClientHandler, вот код:

List<KeyValuePair<string, string>> ListLogin = new List<KeyValuePair<string, string>>(); //key value pair is the input name and then the input value to be used
ListLogin = AddToList("userid", "someUser", ListLogin);
ListLogin = AddToList("passwd", "somePassword", ListLogin);
ListLogin = AddToList("domain", "whoCares", ListLogin);
ListLogin = AddToList("destinationURL", "/", ListLogin);
IEnumerable<KeyValuePair<string, string>> QueryLogin = GetEnumerable(ListLogin);

PostRequest("URL.com", QueryLogin);

Итак, вышеизложенное строит пару ключ-значение для чегосервер будет ожидать.Затем, используя методы для создания запроса.

Я также покажу метод AddToList:

  public static List<KeyValuePair<string, string>> AddToList(string 
         strInput1, string strInput2, List<KeyValuePair<string, string>> 
        ListInput)
{
    List<KeyValuePair<string, string>> NewList = ListInput;
    NewList.Add(new KeyValuePair<string, string>(strInput1, strInput2));
    return NewList;
}

Вот также метод getEnumerable:

public static IEnumerable<KeyValuePair<string, string>> GetEnumerable(List<KeyValuePair<string, string>> ListInput)
            {
                IEnumerable<KeyValuePair<string, string>> queriesNew = ListInput;
                return queriesNew;
            }

Наконец методы отправки и получения запроса:

      async static void PostRequest(string strUrl,
      IEnumerable<KeyValuePair<string, string>> queries)
{
    Uri uri = new Uri(strUrl);
    cookieContainer.GetCookies(uri);
    HttpContent q = new FormUrlEncodedContent(queries);
    HttpResponseMessage response = await client.PostAsync(strUrl, q);

    HttpContent content = response.Content;
    string myContent = await content.ReadAsStringAsync();

    // Console.WriteLine(myContent);
    // Console.WriteLine(response);

    IEnumerable<Cookie> responseCookies =
    response.Dispose();

}

async static Task<String> GetRequest(string strUrl)
{

    HttpResponseMessage response = await client.GetAsync(strUrl);
    HttpContent content = response.Content;  //content of the response 
    string myContent = await content.ReadAsStringAsync();
    Console.WriteLine(myContent);
    response.Dispose();  //dispose of the response
    return myContent;

}

Просто ищу конструктивную критику моего подхода. Когда я набираю new get иотправлять запросы, они просто кажутся повторяющимися, и у меня обычно складывалось впечатление, что если они кажутся повторяющимися, может быть, есть лучший способ. А затем сделать это немного из вопроса, состоящего из двух частей: методов PostRequest и GetRequest. Я думаю, что это будетбыть лучше, чтобы поместить это в свой собственный класс, чтобы его можно было использовать в других решениях / проектах?Yay / Nay?

Спасибо заранее.

...