Обработка сообщения об ошибке json из REST API через HTTPWebRepsonse - PullRequest
1 голос
/ 02 марта 2012

Я использую REST API (предоставляемый клиентом) в C # / asp.net и манипулирую результатом json, возвращаемым этим REST API.Я использовал его, используя следующий код.

     HttpWebResponse res = null;
     string ReturnBody = string.Empty;

   string requestBody = string.Empty;
                WebRequest request = WebRequest.Create(Path);
                request.ContentType = "application/json";
                request.Method = "POST";
                request.ContentLength = json.Length;

                //Add Basic Auhtentication header
                string authInfo = Username + ":" + Password;
                authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
                request.Headers["Authorization"] = "Basic " + authInfo;

                System.IO.StreamWriter sw = new System.IO.StreamWriter(request.GetRequestStream());
                sw.Write(json);
                sw.Close();
                res = (HttpWebResponse)request.GetResponse();
                if (res != null)
                {
                    using (StreamReader sr = new StreamReader(res.GetResponseStream(), true))
                    {
                        ReturnBody = sr.ReadToEnd();
                        StringBuilder s = new StringBuilder();
                        s.Append(ReturnBody);
                        sr.Close();
                    }
                }

Я поместил приведенный выше код в блок try catch, поэтому он работает правильно, если вернет код успеха (200), поэтому я могу использовать ответ json от res объект в соответствии с приведенным выше кодом

, но когда этот REST API выдает ошибку, он будет перенаправлен на перехват, и res будет null , поэтому я не могу получить доступJSON ответ на сообщение об ошибке, как я могу получить его по Скрипач , как показано на рисунке ниже.

REST test through fiddler

так что помогите мне о Как я могуиспользовать этот json сообщение об ошибке через мой код?

Заранее спасибо!за любую помощь.

1 Ответ

1 голос
/ 02 марта 2012

Возможно, вы получите WebException - проверьте свойство status . В вашем случае это будет указывать на ошибку протокола, то есть 401/403 и т. Д. В этом случае свойство Response может использоваться для получения фактического HTTP-ответа. Например,

try
{
   res = (HttpWebResponse)request.GetResponse();
   // handle successful response
   ...
}
catch(WebException ex)
{
    if (ex.Status == WebExceptionStatus.ProtocolError)
    {
       var response = (HttpWebResponse)ex.Response;
       // use the response as needed - in your case response.StatusCode would be 403
       // and body will have JSON describing the error.
       ..  
    }
    else
    {
       // handle other errors, perhaps re-throw
       throw;
    }
}
...