/// <summary> /// HTTPs the request handler. /// </summary> /// <returns>The request handler.</returns> /// <param name="ctx">Context.</param> public static object HTTPRequestHandler(HttpListenerContext ctx) { switch (ctx.Request.HttpMethod) { case "GET": return(MainClass.HandleGETRequest(ctx)); case "POST": return(MainClass.HandlePOSTRequest(ctx, CustomSessionIdentity.GetSessionIdentity(ctx))); case "HEAD": return(""); case "OPTIONS": ctx.Response.AddHeader("Allow", "GET,HEAD,POST,OPTIONS"); return(""); case "PUT": case "DELETE": case "TRACE": case "CONNECT": case "PATCH": default: ctx.Response.StatusCode = 405; return("NOT ALLOWED"); } }
/// <summary> /// Handles the GET request. /// </summary> /// <returns> /// The GET request. /// </returns> /// <param name='ctx'> /// Context. /// </param> public static object HandleGETRequest(HttpListenerContext ctx) { if (!string.IsNullOrEmpty(ctx.Request.Headers [RESTKeys.RESTHandlerRequest])) { if (!RESTCallbackManager.Instance.GETCallbacks.ContainsKey(ctx.Request.Headers [RESTKeys.RESTHandlerRequest])) { ctx.Response.StatusCode = 404; return(HttpResponse.NewResponse().AddErrorCode(GuruMeditation.ErrorCode.RESTHandlerRequestNotFound).ToJSON()); } // Is a REST API request SessionIdentity si = CustomSessionIdentity.GetSessionIdentity(ctx); Dictionary <string, string> Headers = UtilitiesManager.Instance.GetHeaders(ctx); // This is where the string specified in the REQUEST header is matched against the // GET REST API mappings HttpResponse ret = RESTCallbackManager.Instance.GETCallbacks [ctx.Request.Headers [RESTKeys.RESTHandlerRequest]] (Headers, si); ctx.Response.ContentType = "application/json; charset=utf-8"; if (ret.ErrorCode.Count() > 0) { ctx.Response.StatusCode = 500; } return(ret.ToJSON()); } else { // Not a REST API Request string route = RouterManager.Instance.FindRoute(ctx.Request.Url).FirstOrDefault(); if (!string.IsNullOrEmpty(route) && ContentManager.Instance.content.ContainsKey(route)) { var item = ContentManager.Instance.content[route]; ctx.Response.ContentType = item.ContentType.MediaType; ctx.Response.ContentEncoding = System.Text.Encoding.UTF8; return(item); } else if (!string.IsNullOrEmpty(route) && RESTCallbackManager.Instance.GETCallbacks.ContainsKey(route)) { SessionIdentity si = CustomSessionIdentity.GetSessionIdentity(ctx); Dictionary <string, string> Headers = UtilitiesManager.Instance.GetHeaders(ctx); // This is where the string specified in the REQUEST header is matched against the // GET REST API mappings HttpResponse ret = RESTCallbackManager.Instance.GETCallbacks [route] (Headers, si); //ctx.Response.ContentType = "application/json; charset=utf-8"; if (ret.ErrorCode.Count() > 0) { ctx.Response.StatusCode = 500; } ctx.Response.Redirect("/"); return(""); } else { ctx.Response.StatusCode = 404; return("NOT FOUND"); } } }