diff --git a/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/DNTFrameworkCoreTemplateAPI.API.csproj b/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/DNTFrameworkCoreTemplateAPI.API.csproj index f309da2..0210b3c 100644 --- a/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/DNTFrameworkCoreTemplateAPI.API.csproj +++ b/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/DNTFrameworkCoreTemplateAPI.API.csproj @@ -10,6 +10,8 @@ + + diff --git a/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/Properties/launchSettings.json b/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/Properties/launchSettings.json index 89a30da..41c14cd 100644 --- a/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/Properties/launchSettings.json +++ b/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/Properties/launchSettings.json @@ -1,18 +1,18 @@ -{ - "$schema": "http://json.schemastore.org/launchsettings.json", +{ "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, + "windowsAuthentication": false, + "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:43573", "sslPort": 44365 } }, + "$schema": "http://json.schemastore.org/launchsettings.json", "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, - "launchUrl": "api/", + "launchUrl": "swagger", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } @@ -21,10 +21,10 @@ "commandName": "Project", "launchBrowser": true, "launchUrl": "api/", - "applicationUrl": "https://localhost:6001;http://localhost:6000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" - } + }, + "applicationUrl": "https://localhost:6001;http://localhost:6000" } } } \ No newline at end of file diff --git a/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/Registry.cs b/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/Registry.cs index ad99a51..776d4f8 100644 --- a/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/Registry.cs +++ b/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/Registry.cs @@ -55,6 +55,7 @@ public static void AddWeb(this IServiceCollection services) options.UseDefaultFilteredPagedQueryModelBinder(); options.Filters.Add(); }) + .AddApiExplorer() .AddCors(options => { options.AddPolicy("CorsPolicy", diff --git a/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/Startup.cs b/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/Startup.cs index f236614..8bc80da 100644 --- a/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/Startup.cs +++ b/DNTFrameworkCoreTemplateAPI/src/DNTFrameworkCoreTemplateAPI.API/Startup.cs @@ -17,6 +17,9 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Tokens; using Newtonsoft.Json; +using Swashbuckle.AspNetCore.SwaggerUI; +using Swashbuckle.AspNetCore.Swagger; +using System.Collections.Generic; namespace DNTFrameworkCoreTemplateAPI.API { @@ -63,6 +66,39 @@ public void ConfigureServices(IServiceCollection services) services.AddResources(); services.AddWeb(); services.AddJwtAuthentication(Configuration); + + services.AddSwaggerGen(c => + { + c.SwaggerDoc("api", new Info + { + Version = "api", + Title = "Services", + Description = "DNTFramework API Services", + Contact = new Contact + { + Email = "gholamrezarabbal@gmail.com", + Name = "GholamReza Rabbal", + Url = "http://www.dotnettips.info/user/%D8%BA%D9%84%D8%A7%D9%85%D8%B1%D8%B6%D8%A7%20%D8%B1%D8%A8%D8%A7%D9%84" + } + }); + + c.AddSecurityDefinition("Bearer", new ApiKeyScheme() + { + In = "header", + Description = "JWT Authorization header using the Bearer scheme. Example: \"bearer {token}\"", + Name = "Authorization", + Type = "apiKey" + }); + + c.AddSecurityRequirement(new Dictionary> + { + {"Bearer", new string[] { }}, + {"oauth2", new string[] { }} + }); + + c.EnableAnnotations(); + + }); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. @@ -116,6 +152,21 @@ await context.Response.WriteAsync(JsonConvert.SerializeObject(new app.UseMvc(); app.UseSignalR(routes => { routes.MapHub("/api/notificationhub"); }); app.UseEFSecondLevelCache(); + + app.UseSwagger(c => + { + c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.Host = httpReq.Host.Value); + c.RouteTemplate = "api-docs/{documentName}/swagger.json"; + + }); + + app.UseSwaggerUI(c => + { + c.ShowExtensions(); + c.SwaggerEndpoint($"/api-docs/api/swagger.json", "api"); + c.DocExpansion(DocExpansion.None); + c.DocumentTitle = "Services"; + }); } } } \ No newline at end of file