Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
            }
        }