2015-07-29 3 views
2

У меня есть API, который возвращает json response. Когда я называю API от Fiddler это дает мне json reponse , как показано ниже:Как обрабатывать ответ ошибки 401 с помощью C#?

enter image description here

JSON ответ: enter image description here

вызовов к API с веб-страницы:

protected void FinalCall() 
    { 

     // try 
     // { 
      string url = txtdomainURL.Text.Trim(); 
      string apiname = txtAPIname.Text.Trim(); 
      string apiURL = apiname+"/"+txtStoreID.Text.Trim()+"/"+txtSerialNo.Text.Trim(); //"duediligence/1/45523354232323424";// 990000552672620";//45523354232323424"; 
      //duediligence/1/45523354232323424 HTTP/1.1 
      string storeID = txtStoreID.Text.Trim();//Test Store ID:1 Live Store ID: 2 
      string partnerID = txtPartnerID.Text.Trim();// "1"; 
      string scretKey = txtSecretKey.Text.Trim();// "234623ger787qws3423"; 
      string requestBody = txtRequestBody.Text.Trim(); //"{\"category\": 8}"; 
      string data = scretKey + requestBody; 


      string signatureHash = SHA1HashStringForUTF8String(data); 
      lblSignatureHash.Text = signatureHash; 
      String userName = partnerID; 
      String passWord = signatureHash; 
      string credentials = userName + ":" + passWord;//Convert.ToBase64String(Encoding.ASCII.GetBytes(userName + ":" + passWord)); 
      var dataString = JsonConvert.SerializeObject(requestBody); //JsonConvert.SerializeObject(requestBody); 
      var bytes = Encoding.Default.GetBytes(dataString); 


      WebClient client = new WebClient(); 
      string base64 = Convert.ToBase64String(Encoding.ASCII.GetBytes(credentials)); 
      client.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(credentials)); 
      lblBase64.Text = base64; 

      client.Headers.Add(HttpRequestHeader.Accept, "application/json"); 
      client.Headers.Add(HttpRequestHeader.ContentType, "application/json"); 
      //string response = cli.UploadString(url + apiURL, dataString); //"{some:\"json data\"}" 
      string completeURLRequest = url + apiURL; 

      //I GET ERROR HERE 
      var result = client.DownloadString(completeURLRequest); 
      //CODE below this line is not executed 

      //Context.Response.TrySkipIisCustomErrors = true; 
      var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
      var jsonObject = serializer.DeserializeObject(result.ToString()); 
      //var result1 = client.UploadData(completeURLRequest, "POST", bytes); 
      Response.Write(result); 
      txtwebresponse.Text = jsonObject.ToString(); 
     //} 

Теперь, когда то же самое выполняется с веб-страницы, он выдает exeception'401 Unauthorized Exception'. Поэтому вместо показа страницы с ошибкой я хочу прочитать возвращенный ответ об ошибке JSON (как в скрипачке) и показать пользователю.

Помогите оценить!

+0

http://stackoverflow.com/questions/692342/net-httpwebrequest-getresponse-raises-exception-when-http-status-code-400-ba – SilentTremor

+0

привет @SilentTremor, спасибо за ответ. Он отлично работал ..! пожалуйста, отправьте его как ответ, чтобы получить очки/upvotes ..! :) –

+0

'401' не является исключением, это cchallange в ответ на запрос« Несанкционированный ». –

ответ

8

Если вы попросили меня сделать это.

try 
     { 
      using (WebResponse response = request.GetResponse()) 
      { 
       Console.WriteLine("You will get error, if not do the proper processing"); 
      } 
     } 
     catch (WebException e) 
     { 
      using (WebResponse response = e.Response) 
      { 
       HttpWebResponse httpResponse = (HttpWebResponse) response; 
       Console.WriteLine("Error code: {0}", httpResponse.StatusCode); 
       using (Stream data = response.GetResponseStream()) 
       using (var reader = new StreamReader(data)) 
       { 
        // text is the response body 
        string text = reader.ReadToEnd(); 
       } 
      } 
     } 
+0

работы хорошо ..! :) –