public void ProcessRequest(System.Web.HttpContext context) { var url_part = GetUrl(context.Request.RawUrl); // Pour tests avec page html if (url_part.ToLower().EndsWith(".html") || url_part.ToLower().EndsWith(".htm")) { var files = System.IO.Directory.GetFiles(context.Server.MapPath("~")); for (var c = 0; c < files.Length; c++) { var file = files[c].ToLower(); if (file.Contains(url_part.Substring(1))) { context.Response.ContentType = "text/html"; context.Response.Write(System.IO.File.ReadAllText(file)); context.Response.End(); break; } } } var ip = context.Request.ServerVariables["REMOTE_ADDR"]; Utils.Tracer.Log($" > > > > > > Start request || {ip} || path: {url_part} || --- {System.DateTime.Now} ---->"); context.Response.Clear(); object json_response = null; try { context.Response.ContentType = "application/json; charset=utf-8"; foreach (var route in Router) { if (route.Check(url_part)) { Utils.Tracer.Log("route prise : " + route.Path); json_response = route.Execute(); return; } } // Si route pas trouvée json_response = new { error = "Unknown path" }; context.Response.StatusCode = (int)System.Net.HttpStatusCode.NotFound; } catch (System.Exception e) { // TODO Complètement revoir la gestion des exceptions ... ==> FaultException, FaultException2 ? Pourquoi j'ai utilisé ces classes pourries ? string exceptionType = e.GetType().Name; switch (exceptionType) { case "FaultException": FaultException _e = e as FaultException; context.Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest; json_response = new { error = _e.Message }; break; case "FaultException2": HandlerException _e2 = e as HandlerException; context.Response.StatusCode = (int)_e2.StatusCode; json_response = new { error = _e2.Message }; break; case "TargetInvocationException": // exception coming from a reflected assembly method context.Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError; json_response = new { error = (e as System.Reflection.TargetInvocationException).InnerException.Message, type = exceptionType, trace = (e as System.Reflection.TargetInvocationException).InnerException.StackTrace }; break; default: context.Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError; json_response = new { error = e.Message, type = exceptionType, trace = e.StackTrace }; break; } Utils.Tracer.Log("IDPHandler.ProcessRequest " + e); } finally { Utils.Tracer.Log($" < < < < < < < End request || {ip} || path: {url_part} || --- {System.DateTime.Now} <----"); /// If there is a response if (json_response != null) { context.Reply(json_response); } /// If Route.Execute() returned null ==> Reject 401 else { context.Response.StatusCode = (int)System.Net.HttpStatusCode.Unauthorized; } /// Applies cross-domain http-header if needed if ( System.Web.Configuration.WebConfigurationManager.AppSettings["cross_domain"] != null && int.TryParse(System.Web.Configuration.WebConfigurationManager.AppSettings["cross_domain"], out int cross_domain) && cross_domain == 1 ) { context.Response.AppendHeader("Access-Control-Allow-Origin", "*"); } /// End request traitement and flush context.Response.End(); } }