public static void HandleSwagger(IContext context, VersionTable <SiteHost> versions) { var path = context.Request.Url.AbsolutePath; if (path == "/swagger") { context.Response.Redirect("/swagger/"); return; } if (path == "/swagger/") { HttpConverters.SendFile(@"swagger-ui\index.html", context); return; } if (path == "/swagger/wrapperLoadFunction.js") { // Query the loaded versions, build a JS document with the named versions to load BuildStartupFunction(context, versions); return; } if (path.StartsWith("/swagger/json")) // generator functions { // populate each version from the Huygens servers in the version table var requestedVersion = path.Substring(14); Trace.TraceInformation("Looking for version " + requestedVersion); SendApiSpecForVersion(context, versions, requestedVersion); return; } var guessPath = @"swagger-ui\" + (path.Substring(9).Replace("/", "\\")); Trace.TraceInformation("Trying to send a swagger file at '" + guessPath + "' from request '" + path + "'"); HttpConverters.SendFile(guessPath, context); }
/// <summary> /// This is where the routing happens /// </summary> private void InnerHandler(IContext context, Stream output) { var request = context.Request; var response = context.Response; if (HandleSpecialPaths(context, output)) { return; // special unsecured paths } if (CheckSecurity(context, output)) { return; } if (FindMatchingVersion(response, request, output, out var proxy)) { return; } //var proxy = _versionTable.AllVersions().First(); // TEST: Use first version try { //Trace.TraceInformation("Converting and handling (" + proxy.TargetPath + ")"); var sreq = HttpConverters.ConvertToSerialisable(request); var sw_core = new Stopwatch(); sw_core.Start(); var result = proxy.Request(sreq); sw_core.Stop(); HttpConverters.CopyToHttpListener(result, response, ExternalEndpoint); Trace.TraceInformation("Call complete. Core timing: " + sw_core.Elapsed); } catch (Exception ex) { Trace.TraceWarning("Call failed: " + ex); InternalFailure(response, ex, proxy, output); } }