获取Web服务返回的实际错误代码

时间:2017-08-08 07:24:04

标签: c# rest httpwebrequest

我在django rest框架中给了我一个休息服务。我试图在C#中使用这项服务。

以下是我的示例代码:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://abcd.zyz.com/hello/pqr");

request.Method = "POST";
request.ContentType = "application/json";

System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();

string data = "{" + "\"key" + "\":" + "\"" + value + "\"}";


byte[] bytes = encoding.GetBytes(data);

request.ContentLength = bytes.Length;

string strUserNameAndPasswordForHeader = strUserName + ":" + strPassword;

request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(strUserNameAndPasswordForHeader)); /*Add username password to header*/

using (Stream requestStream = request.GetRequestStream())
{
    // Send the data.
    requestStream.Write(bytes, 0, bytes.Length);
}

var response = request.GetResponse();

最后一行导致Web异常。当我尝试获取状态代码时,我得到403 Forbidden。编写服务的用户表示当密码不正确时返回-5。当用户帐户不存在时返回-6。如何处理这些错误值,因为对于我来说,对于每个场景,它总是返回403.在Web异常中哪里可以看到-5和-6?

1 个答案:

答案 0 :(得分:2)

在调用WebException时,未成功的HTTP响应(因此2xx以外的状态代码)将抛出HttpWebRequest.GetResponse。为了仍然访问响应,您可以捕获异常,然后访问其Response属性以仍然可以访问从服务器收到的WebResponse对象:

try
{
    var response = request.GetResponse();
    // handle successful case
}
catch (WebException ex)
{
    if (ex.Response != null)
    {
        var responseStream = ex.Response.GetResponseStream();
        // do something with the response
    }
    else
        throw;
}