来自 WebClient 的 BadRequest 消息

BadRequest Message from WebClient

当我通过 Postman 拨打电话时,我收到一条很好的消息说 "failure in user creation and a 400 Bad Request"。

(附截图)。

当我运行我的c#代码时,它直接跳转到一个异常,但是异常消息不是我在Postman中看到的。这是我的 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# 代码中得到同样的消息。

我已经探索了 System.Net.Http 中的 HttpClient 并且它有效,但是 将涉及更改大量代码在这个应用程序中。我有点不愿意那样做。

使用 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)以专注于您需要的内容。