BadRequest Сообщение от WebClient - PullRequest
       29

BadRequest Сообщение от WebClient

0 голосов
/ 21 октября 2019

Когда я звоню через Почтальона, я получаю приятное сообщение, говорящее «сбой при создании пользователя и 400 неверных запросов».

(Снимок экрана прилагается). Failure In User Creation

Когда я запускаю свой код на c #, он напрямую переходит к исключению, но сообщение об исключении не то, которое я вижу в Почтальоне. Вот мой код C #.

 try
        {
            var wc = new WebClient();
            wc.Headers.Add("Content-Type", "application/json");
            wc.BaseAddress = ServiceUrl;
            wc.Encoding = Encoding.UTF8;
            byte[] ret = wc.UploadData($"{ServiceUrl}/api/CreateUser",
                "POST", System.Text.Encoding.UTF8.GetBytes(userjson));
            var resp = System.Text.Encoding.UTF8.GetString(ret);
            Console.WriteLine(resp);
        }
        catch (WebException e)
        {
            Console.WriteLine("This program is expected to throw WebException on successful run."+
                              "\n\nException Message :" + e.Message);
            if(e.Status == WebExceptionStatus.ProtocolError) 
            {
                Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode);
                Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
                Console.WriteLine("Status Method : {0}", ((HttpWebResponse)e.Response).Method);
            }
        }

Сообщение об ошибке, которое я получаю из своего кода:

Exception Message :The remote server returned an error: (400) Bad Request.

Я хотел бы получить такое же сообщение в своем коде C #.

Я уже исследовал HttpClient в System.Net.Http , и это работает, но это потребовало бы изменения большого количества кода в этом приложении. Я немного не хочу этого делать.

1 Ответ

0 голосов
/ 21 октября 2019

С помощью WebClient вы сможете получить ответное сообщение следующим образом:

using (WebClient client = new WebClient())
{
    try
    {
        string data = client.DownloadString("https://localhost:44357/weatherforecast");
    }
    catch (WebException ex)
    {
        using (StreamReader r = new StreamReader(ex.Response.GetResponseStream()))
        {
            string response = r.ReadToEnd(); // access the reponse message
        }
    }
}

Я упростил код (используя HTTP GET), чтобы сосредоточиться на том, что вам нужно.

...