{"id":2120,"date":"2019-04-24T09:55:55","date_gmt":"2019-04-24T08:55:55","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=2120"},"modified":"2022-07-25T08:33:26","modified_gmt":"2022-07-25T07:33:26","slug":"c-configure-swagger","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/c-configure-swagger\/","title":{"rendered":"C# configure swagger"},"content":{"rendered":"\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing Domain.Ports;\nusing Swashbuckle.AspNetCore.Swagger;\nusing WebApi.Helpers;\nusing WebApi.Security;\n\n#pragma warning disable CS1591 \/\/ Missing XML comment for publicly visible type or member\nnamespace WebApi\n{\n    public class Startup\n    {\n        private readonly Wiring.Wiring _wiring;\n        public IConfiguration Configuration { get; }\n\n        public Startup(IConfiguration configuration)\n        {\n            \/\/ Use the system library for HttpConnections (with systemproxy)\n            AppContext.SetSwitch(\"System.Net.Http.UseSocketsHttpHandler\", false);\n\n            Configuration = configuration;\n            _wiring = new Wiring.Wiring();\n        }\n\n        public void ConfigureServices(IServiceCollection services)\n        {\n            JwtTokenAuthentication.Register(services, Configuration);\n\n            services.AddCors(options =>\n            {\n                options.AddPolicy(\"CorsPolicy\",\n                    builder => builder.AllowAnyOrigin()\n                        .AllowAnyMethod()\n                        .AllowAnyHeader()\n                        .AllowCredentials()\n                        .Build());\n            });\n            \n            services.AddMvc();\n\n\n            if (Configuration[\"ApiSettings:DocumentationEnabled\"].Contains(\"true\", StringComparison.OrdinalIgnoreCase)) {\n            \n                services.AddSwaggerGen(c =>\n                {\n                    c.SwaggerDoc(\"v1\", new Info\n                    {\n                        Title = $\"{Configuration[\"ApiSettings:Title\"]} {AppHelper.GetVersion()}\", \n                        Version = \"v1\",\n                        Description = Configuration[\"ApiSettings:Description\"],\n                        Contact = new Contact()\n                        {\n                            Name = Configuration[\"ApiSettings:ContactName\"],\n                            Email = Configuration[\"ApiSettings:ContactEmail\"],\n                            Url = Configuration[\"ApiSettings:ContactUrl\"]\n                        }                    \n                    });\n                    var xmlFile = $\"{Assembly.GetExecutingAssembly().GetName().Name}.XML\";\n                    if (File.Exists(xmlFile)) {\n                        var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);            \n                        c.IncludeXmlComments(xmlPath);\n                    }\n                    else\n                    {\n                        DomainPorts.LogMessageStore.StoreError($\"Documentation file not found: {xmlFile}\");\n                    }\n\n                    c.AddSecurityDefinition(\"Bearer\", new ApiKeyScheme\n                    {\n                        In = \"header\", \n                        Description = \"Please enter JWT with Bearer into field\", \n                        Name = \"Authorization\", \n                        Type = \"apiKey\",\n                    });\n                    c.AddSecurityRequirement(new Dictionary&lt;string, IEnumerable&lt;string>> {\n                        { \"Bearer\", Enumerable.Empty&lt;string>() },\n                    });\n                });\n\n            }\n        }\n\n        \/\/ This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(IApplicationBuilder app, IHostingEnvironment env)\n        {\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n\n            if (Configuration[\"ApiSettings:DocumentationEnabled\"].Contains(\"true\", StringComparison.OrdinalIgnoreCase))\n            {\n                \/\/ Enable middleware to serve generated Swagger as a JSON endpoint.            \n                app.UseSwagger(c => { c.RouteTemplate = \"docs\/{documentName}\/docs.json\"; });\n\n                \/\/ Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.), \n                \/\/ specifying the Swagger JSON endpoint.\n                app.UseSwaggerUI(c =>\n                {\n                    c.SwaggerEndpoint(\"\/docs\/v1\/docs.json\", $\"{Configuration[\"ApiSettings:Title\"]} v1\");\n                    c.RoutePrefix = \"docs\";\n                    c.DocumentTitle = $\"{Configuration[\"ApiSettings:Title\"]}  {AppHelper.GetVersion()}\";\n                    c.HeadContent = $\"&lt;style>{File.ReadAllText(\".\/Content\/swagger-styles.css\")}&lt;\/style>\";\n                });\n            }\n\n            app.UseCors(\"CorsPolicy\");\n            app.UseAuthentication();\n\n            app.UseMvc();\n        }\n    }\n}\n#pragma warning restore CS1591 \/\/ Missing XML comment for publicly visible type or member<\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[6,4,1],"tags":[],"class_list":["post-2120","post","type-post","status-publish","format-standard","hentry","category-dotnet","category-programming","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/2120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=2120"}],"version-history":[{"count":1,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/2120\/revisions"}],"predecessor-version":[{"id":2121,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/2120\/revisions\/2121"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=2120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=2120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=2120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}