public SwaggerUiIndexMiddleware(RequestDelegate nextDelegate, string indexPath, SwaggerUiSettingsBase <T> settings, string resourcePath)
 {
     _nextDelegate = nextDelegate;
     _indexPath    = indexPath;
     _settings     = settings;
     _resourcePath = resourcePath;
 }
示例#2
0
 public SwaggerUiIndexMiddleware(OwinMiddleware next, string indexPath, SwaggerUiSettingsBase settings, string resourcePath)
     : base(next)
 {
     _indexPath    = indexPath;
     _settings     = settings;
     _resourcePath = resourcePath;
 }
        private static void UseSwaggerUiWithDocumentNamePlaceholderExpanding(IApplicationBuilder app,
                                                                             SwaggerUiSettingsBase <WebApiToSwaggerGeneratorSettings> settings,
                                                                             Action <string, string> register,
                                                                             Action <IReadOnlyDictionary <string, ISwaggerGenerator> > registerMultiple)
        {
            if (settings.ActualSwaggerRoute.Contains("{documentName}"))
            {
                var registry = app.ApplicationServices.GetRequiredService <SwaggerDocumentRegistry>();
                if (settings.ActualSwaggerUiRoute.Contains("{documentName}"))
                {
                    // Register multiple uis
                    foreach (var document in registry.Documents)
                    {
                        register(
                            settings.ActualSwaggerRoute.Replace("{documentName}", document.Key),
                            settings.ActualSwaggerUiRoute.Replace("{documentName}", document.Key));
                    }
                }
                else
                {
                    // Register single ui with multiple documents
                    registerMultiple(registry.Documents);
                    register(settings.ActualSwaggerRoute, settings.ActualSwaggerUiRoute);
                }
            }
            else
            {
                if (settings.ActualSwaggerUiRoute.Contains("{documentName}"))
                {
                    throw new ArgumentException("The SwaggerUiRoute cannot contain '{documentName}' placeholder when SwaggerRoute is missing the placeholder.");
                }

                register(settings.ActualSwaggerRoute, settings.ActualSwaggerUiRoute);
            }
        }
        private static void UseSwaggerUiWithDocumentNamePlaceholderExpanding(IApplicationBuilder app,
                                                                             SwaggerUiSettingsBase <WebApiToSwaggerGeneratorSettings> settings,
                                                                             Action <string, string> register,
                                                                             Func <IEnumerable <SwaggerDocumentRegistration>, bool> registerMultiple)
        {
            if (settings.ActualSwaggerDocumentPath.Contains("{documentName}"))
            {
                var documents = app.ApplicationServices.GetRequiredService <IEnumerable <SwaggerDocumentRegistration> >();
                if (settings.ActualSwaggerUiPath.Contains("{documentName}"))
                {
                    // Register multiple uis for each document
                    foreach (var document in documents)
                    {
                        register(
                            settings.ActualSwaggerDocumentPath.Replace("{documentName}", document.DocumentName),
                            settings.ActualSwaggerUiPath.Replace("{documentName}", document.DocumentName));
                    }
                }
                else
                {
                    // Register single ui with multiple documents
                    if (registerMultiple(documents))
                    {
                        register(settings.ActualSwaggerDocumentPath, settings.ActualSwaggerUiPath);
                    }
                    else
                    {
                        // If multiple documents is not supported and only one document is registered
                        if (documents.Count() == 1)
                        {
                            register(
                                settings.ActualSwaggerDocumentPath.Replace("{documentName}", documents.First().DocumentName),
                                settings.ActualSwaggerUiPath.Replace("{documentName}", documents.First().DocumentName));
                        }
                        else
                        {
                            throw new NotSupportedException("This UI does not support multiple documents per UI: " +
                                                            "Do not use '{documentName}' placeholder only in DocumentPath but also in Path to register multiple UIs.");
                        }
                    }
                }
            }
            else
            {
                if (settings.ActualSwaggerUiPath.Contains("{documentName}"))
                {
                    throw new ArgumentException("The SwaggerUiRoute cannot contain '{documentName}' placeholder when SwaggerRoute is missing the placeholder.");
                }

                // Register single ui with one document
                register(settings.ActualSwaggerDocumentPath, settings.ActualSwaggerUiPath);
            }
        }
        private static void UseSwaggerUiWithDocumentNamePlaceholderExpanding(IApplicationBuilder app,
                                                                             SwaggerUiSettingsBase <WebApiToSwaggerGeneratorSettings> settings,
                                                                             Action <string, string> register,
                                                                             Action <IEnumerable <SwaggerDocumentRegistration> > registerMultiple)
        {
            if (settings.ActualSwaggerDocumentPath.Contains("{documentName}"))
            {
                var documents = app.ApplicationServices.GetRequiredService <IEnumerable <SwaggerDocumentRegistration> >();
                if (settings.ActualSwaggerUiPath.Contains("{documentName}"))
                {
                    // Register multiple uis for each document
                    foreach (var document in documents)
                    {
                        register(
                            settings.ActualSwaggerDocumentPath.Replace("{documentName}", document.DocumentName),
                            settings.ActualSwaggerUiPath.Replace("{documentName}", document.DocumentName));
                    }
                }
                else
                {
                    // Register single ui with multiple documents
                    registerMultiple(documents);
                    register(settings.ActualSwaggerDocumentPath, settings.ActualSwaggerUiPath);
                }
            }
            else
            {
                if (settings.ActualSwaggerUiPath.Contains("{documentName}"))
                {
                    throw new ArgumentException("The SwaggerUiRoute cannot contain '{documentName}' placeholder when SwaggerRoute is missing the placeholder.");
                }

                // Register single ui with one document
                register(settings.ActualSwaggerDocumentPath, settings.ActualSwaggerUiPath);
            }
        }