private static void CallSafely(Request request, string payload, Response writeResponse, Func<Request, JSONValue, JSONValue> method) { RestRequestException exception; try { JSONValue value2 = 0; if (payload.Trim().Length == 0) { value2 = new JSONValue(); } else { try { value2 = new JSONParser(request.Payload).Parse(); } catch (JSONParseException) { ThrowInvalidJSONException(); } } writeResponse.SimpleResponse(HttpStatusCode.Ok, method.Invoke(request, value2).ToString()); } catch (JSONTypeException) { ThrowInvalidJSONException(); } catch (KeyNotFoundException) { exception = new RestRequestException { HttpStatusCode = HttpStatusCode.BadRequest }; RespondWithException(writeResponse, exception); } catch (RestRequestException exception2) { RespondWithException(writeResponse, exception2); } catch (Exception exception3) { exception = new RestRequestException { HttpStatusCode = HttpStatusCode.InternalServerError, RestErrorString = "InternalServerError", RestErrorDescription = "Caught exception while fulfilling request: " + exception3 }; RespondWithException(writeResponse, exception); } }
private void InvokeDelete(Request request, string payload, Response writeResponse) { CallSafely(request, payload, writeResponse, new Func<Request, JSONValue, JSONValue>(this, (IntPtr) this.HandleDelete)); }
private static void RespondWithException(Response writeResponse, RestRequestException rre) { StringBuilder builder = new StringBuilder("{"); if (rre.RestErrorString != null) { builder.AppendFormat("\"error\":\"{0}\",", rre.RestErrorString); } if (rre.RestErrorDescription != null) { builder.AppendFormat("\"errordescription\":\"{0}\"", rre.RestErrorDescription); } builder.Append("}"); writeResponse.SimpleResponse(rre.HttpStatusCode, builder.ToString()); }