如何在运行于ASP.NET Core 3.1的启用OData的Web API中添加Swagger [英] How to add Swagger in OData-enabled Web API running on ASP.NET Core 3.1
问题描述
我想在我的Web API中同时使用OData和Swagger.我正在运行ASP.NET Core 3.1.
我找到了这些文章,其中一篇启用OData,另一篇启用SwaggerUI
- 启用OData::
它什么也没显示!
这是我的控制者:
控制器
[Route("[controller]"))]公共类WeatherForecastController:ControllerBase{私有静态只读字符串[]摘要=新[]{冻结",支撑",寒冷",凉爽",温和",温暖",温暖",闷热",闷热",闷热",闷热",闷热",闷热",闷热",闷热",闷热",闷热".};[EnableQuery]公共IEnumerable< WeatherForecast>得到(){var rng = new Random();返回Enumerable.Range(1,5).Select(index => new WeatherForecast{ID = Guid.NewGuid(),日期= DateTime.Now.AddDays(索引),温度C = rng.Next(-20,55),摘要=摘要[rng.Next(Summaries.Length)]}).ToArray();}}
解决方案我在nuget包下面使用过,此问题已解决.安装包OData.Swagger
参考: https://github.com/KishorNaik/Sol_OData_Swagger_Support
I want to use both OData and Swagger in my Web API. I'm running ASP.NET Core 3.1.
I have found these articles, one to enable OData and another to enable SwaggerUI
- Enable OData: https://devblogs.microsoft.com/odata/enabling-endpoint-routing-in-odata/
- Enable Swagger: https://www.coderjony.com/blogs/adding-swagger-to-aspnet-core-31-web-api/
However, I can't seem to enable both at the same time. It seems that I'm mixing them wrong.
This is the code that I have currently:
Startup.cs
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddOData(); AddSwagger(services); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Foo API V1"); }); app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.Select().Filter().OrderBy().Count().MaxTop(10); endpoints.MapODataRoute("odata", "odata", GetEdmModel()); }); } private IEdmModel GetEdmModel() { var odataBuilder = new ODataConventionModelBuilder(); odataBuilder.EntitySet<WeatherForecast>("WeatherForecast"); return odataBuilder.GetEdmModel(); } private void AddSwagger(IServiceCollection services) { services.AddSwaggerGen(options => { var groupName = "v1"; options.SwaggerDoc(groupName, new OpenApiInfo { Title = $"Foo {groupName}", Version = groupName, Description = "Foo API", Contact = new OpenApiContact { Name = "Foo Company", Email = string.Empty, Url = new Uri("https://example.com/"), } }); }); } }
It works when I go to https://localhost:44363/odata/weatherforecast But when I try to load the Swagger interface, this is showing:
It doesn't show anything!
This is my controller:
Controller
[Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; [EnableQuery] public IEnumerable<WeatherForecast> Get() { var rng = new Random(); return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Id = Guid.NewGuid(), Date = DateTime.Now.AddDays(index), TemperatureC = rng.Next(-20, 55), Summary = Summaries[rng.Next(Summaries.Length)] }) .ToArray(); } }
解决方案I used below nuget package and this issue got resolved. Install-Package OData.Swagger
Ref: https://github.com/KishorNaik/Sol_OData_Swagger_Support
这篇关于如何在运行于ASP.NET Core 3.1的启用OData的Web API中添加Swagger的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!