ApiUtil.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. namespace SRDebugger.Internal
  2. {
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Net;
  6. using SRF;
  7. public static class SRDebugApiUtil
  8. {
  9. public static string ParseErrorException(WebException ex)
  10. {
  11. if (ex.Response == null)
  12. {
  13. return ex.Message;
  14. }
  15. try
  16. {
  17. var response = ReadResponseStream(ex.Response);
  18. return ParseErrorResponse(response);
  19. }
  20. catch
  21. {
  22. return ex.Message;
  23. }
  24. }
  25. public static string ParseErrorResponse(string response, string fallback = "Unexpected Response")
  26. {
  27. try
  28. {
  29. var jsonTable = (Dictionary<string, object>) Json.Deserialize(response);
  30. var error = "";
  31. error += jsonTable["errorMessage"];
  32. object value;
  33. if (jsonTable.TryGetValue("errors", out value) && value is IList<object>)
  34. {
  35. var errors = value as IList<object>;
  36. foreach (var e in errors)
  37. {
  38. error += "\n";
  39. error += e;
  40. }
  41. }
  42. return error;
  43. }
  44. catch
  45. {
  46. if (response.Contains("<html>"))
  47. {
  48. return fallback;
  49. }
  50. return response;
  51. }
  52. }
  53. #if UNITY_EDITOR || (!NETFX_CORE && !UNITY_WINRT)
  54. public static bool ReadResponse(HttpWebRequest request, out string result)
  55. {
  56. try
  57. {
  58. var response = request.GetResponse();
  59. result = ReadResponseStream(response);
  60. return true;
  61. }
  62. catch (WebException e)
  63. {
  64. result = ParseErrorException(e);
  65. return false;
  66. }
  67. }
  68. #endif
  69. public static string ReadResponseStream(WebResponse stream)
  70. {
  71. using (var responseSteam = stream.GetResponseStream())
  72. {
  73. using (var streamReader = new StreamReader(responseSteam))
  74. {
  75. return streamReader.ReadToEnd();
  76. }
  77. }
  78. }
  79. }
  80. }