1111using Microsoft . Extensions . Configuration ;
1212using Microsoft . Extensions . DependencyInjection ;
1313using Microsoft . Extensions . Logging ;
14+ using Microsoft . Extensions . Options ;
1415using SampleWebApiAspNetCore . Dtos ;
1516using SampleWebApiAspNetCore . Entities ;
1617using SampleWebApiAspNetCore . Repositories ;
1718using SampleWebApiAspNetCore . Services ;
1819using Swashbuckle . AspNetCore . Swagger ;
20+ using Swashbuckle . AspNetCore . SwaggerGen ;
1921
2022namespace WebApplication11
2123{
@@ -55,40 +57,25 @@ public void ConfigureServices(IServiceCollection services)
5557return new UrlHelper ( actionContext ) ;
5658} ) ;
5759
58- services . AddMvcCore ( ) . AddVersionedApiExplorer ( o => o . GroupNameFormat = "'v'VVV" ) ;
59- services . AddMvc ( ) . SetCompatibilityVersion ( CompatibilityVersion . Version_2_1 ) ;
60+
61+ services . AddMvc ( ) . SetCompatibilityVersion ( CompatibilityVersion . Version_2_2 ) ;
6062services . AddApiVersioning ( config=>
6163{
6264config . ReportApiVersions = true ;
6365config . AssumeDefaultVersionWhenUnspecified = true ;
6466config . DefaultApiVersion = new ApiVersion ( 1 , 0 ) ;
6567config . ApiVersionReader = new HeaderApiVersionReader ( "api-version" ) ;
6668} ) ;
67- services . AddSwaggerGen (
68- options=>
69- {
70- var provider = services . BuildServiceProvider ( )
71- . GetRequiredService < IApiVersionDescriptionProvider > ( ) ;
7269
73- foreach ( var description in provider . ApiVersionDescriptions )
74- {
75- options . SwaggerDoc (
76- description . GroupName ,
77- new Info ( )
78- {
79- Title = $ "Sample API{ description . ApiVersion } ",
80- Version = description . ApiVersion . ToString ( )
81- } ) ;
82- }
83- } ) ;
70+ services . AddVersionedApiExplorer ( o=> o . GroupNameFormat = "'v'VVV" ) ;
71+ services . AddTransient < IConfigureOptions < SwaggerGenOptions > , ConfigureSwaggerOptions > ( ) ;
72+ services . AddSwaggerGen ( ) ;
8473}
8574
8675// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
8776public void Configure ( IApplicationBuilder app , ILoggerFactory loggerFactory ,
8877IHostingEnvironment env , IApiVersionDescriptionProvider provider )
8978{
90- loggerFactory . AddConsole ( ) ;
91-
9279if ( env . IsDevelopment ( ) )
9380{
9481app . UseDeveloperExceptionPage ( ) ;
@@ -114,10 +101,18 @@ public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory,
114101} ) ;
115102}
116103
117- //app.AddSeedData();
118-
119104app . UseHttpsRedirection ( ) ;
120105
106+ app . UseCors ( "AllowAllOrigins" ) ;
107+ AutoMapper . Mapper . Initialize ( mapper=>
108+ {
109+ mapper . CreateMap < FoodItem , FoodItemDto > ( ) . ReverseMap ( ) ;
110+ mapper . CreateMap < FoodItem , FoodUpdateDto > ( ) . ReverseMap ( ) ;
111+ mapper . CreateMap < FoodItem , FoodCreateDto > ( ) . ReverseMap ( ) ;
112+ } ) ;
113+
114+ app . UseMvc ( ) ;
115+
121116app . UseSwagger ( ) ;
122117app . UseSwaggerUI (
123118 options=>
@@ -129,16 +124,28 @@ public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory,
129124description . GroupName . ToUpperInvariant ( ) ) ;
130125}
131126} ) ;
127+ }
128+ }
132129
133- app . UseCors ( "AllowAllOrigins" ) ;
134- AutoMapper . Mapper . Initialize ( mapper=>
135- {
136- mapper . CreateMap < FoodItem , FoodItemDto > ( ) . ReverseMap ( ) ;
137- mapper . CreateMap < FoodItem , FoodUpdateDto > ( ) . ReverseMap ( ) ;
138- mapper . CreateMap < FoodItem , FoodCreateDto > ( ) . ReverseMap ( ) ;
139- } ) ;
130+ public class ConfigureSwaggerOptions : IConfigureOptions < SwaggerGenOptions >
131+ {
132+ readonly IApiVersionDescriptionProvider provider ;
140133
141- app . UseMvc ( ) ;
134+ public ConfigureSwaggerOptions ( IApiVersionDescriptionProvider provider ) =>
135+ this . provider = provider ;
136+
137+ public void Configure ( SwaggerGenOptions options )
138+ {
139+ foreach ( var description in provider . ApiVersionDescriptions )
140+ {
141+ options . SwaggerDoc (
142+ description . GroupName ,
143+ new Info ( )
144+ {
145+ Title = $ "Sample API{ description . ApiVersion } ",
146+ Version = description . ApiVersion . ToString ( ) ,
147+ } ) ;
148+ }
142149}
143150}
144151}