You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/3rd/StompyRobot/SRDebugger/Scripts/Internal/ApiUtil.cs

97 lines
2.4 KiB
C#

namespace SRDebugger.Internal
{
using System.Collections.Generic;
using System.IO;
using System.Net;
using SRF;
public static class SRDebugApiUtil
{
public static string ParseErrorException(WebException ex)
{
if (ex.Response == null)
{
return ex.Message;
}
try
{
var response = ReadResponseStream(ex.Response);
return ParseErrorResponse(response);
}
catch
{
return ex.Message;
}
}
public static string ParseErrorResponse(string response, string fallback = "Unexpected Response")
{
try
{
var jsonTable = (Dictionary<string, object>) Json.Deserialize(response);
var error = "";
error += jsonTable["errorMessage"];
object value;
if (jsonTable.TryGetValue("errors", out value) && value is IList<object>)
{
var errors = value as IList<object>;
foreach (var e in errors)
{
error += "\n";
error += e;
}
}
return error;
}
catch
{
if (response.Contains("<html>"))
{
return fallback;
}
return response;
}
}
#if UNITY_EDITOR || (!NETFX_CORE && !UNITY_WINRT)
public static bool ReadResponse(HttpWebRequest request, out string result)
{
try
{
var response = request.GetResponse();
result = ReadResponseStream(response);
return true;
}
catch (WebException e)
{
result = ParseErrorException(e);
return false;
}
}
#endif
public static string ReadResponseStream(WebResponse stream)
{
using (var responseSteam = stream.GetResponseStream())
{
using (var streamReader = new StreamReader(responseSteam))
{
return streamReader.ReadToEnd();
}
}
}
}
}