如何在运行于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

查看:45
本文介绍了如何在运行于ASP.NET Core 3.1的启用OData的Web API中添加Swagger的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的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

    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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆