.Net Core使用Swagger开发接口

.Net Core使用Swagger开发接口,第1张

.Net Core使用Swagger开发接口

一、首先在项目中引入Swashbuckle.AspNetCore;

        如果使用ini类型的作为配置文件还需要引入Microsoft.Extensions.Configuration.Ini

二、Program.cs代码

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;


namespace MyWebApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //两种方式
            CreateHostBuilder(args).Build().Run();
            //CreateWebHostBuilder(args).Build().Run();
        }


        public static IHostBuilder CreateHostBuilder(string[] args)
        {
            return Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    config.Sources.Clear();
                    config.AddIniFile("Config.ini", optional: false, reloadOnChange: true);
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup();
                });
        }


        //public static IWebHostBuilder CreateWebHostBuilder(string[] args)
        //{
        //    return WebHost.CreateDefaultBuilder(args)
        //        .ConfigureAppConfiguration((webhostContext, config) =>
        //        {
        //            config.Sources.Clear();
        //            config.AddIniFile("Config.ini", optional: false, reloadOnChange: true);//配置文件采用Config.ini
        //        })
        //        .UseStartup();
        //}
    }
}

三、Startup.cs代码

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;
using MyWebApiDemo.Filter;
using Newtonsoft.Json;
using System.Collections.Generic;


namespace MyWebApiDemo
{
    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.AddMvc(options=> 
            //{
            //    options.Filters.Add(typeof(CustomResultFilter));
            //}).SetCompatibilityVersion(version:CompatibilityVersion.Version_3_0);


            services.AddMvc(options =>
            {
                options.Filters.Add(typeof(FieldActionFilter));
            }).SetCompatibilityVersion(version: CompatibilityVersion.Version_3_0);


            services.Configure(options=> 
            {
                options.SuppressModelStateInvalidFilter = true;
            });


            if (Configuration["system:EnableSwagger"] =="1")
            {
                services.AddSwaggerGen(c=> {
                    
                    string json= Configuration["system:ApiGroup"];
                    List list = JsonConvert.DeserializeObject>(json);


                    foreach (Item it in list)
                    {
                        //第一个参数,必须与 api 的 GroupName 所使用的值保持一致。
                        c.SwaggerDoc(it.en, new OpenApiInfo()
                        {
                            Version = it.en,//标题的右上角显示
                            Title = $"{it.cn} API示例",
                            Description = $"这个是自己开发的 {it.cn} api 示例文档"
                        });
                    }
                    //或者将分组信息放置于cs文件里
                    //public static Dictionary swaggerDic = new Dictionary()
                    //{
                    //    {"Common","公用接口" }
                    //};
                    //foreach (KeyValuePair kv in Common.swaggerDic)
                    //{
                    //    //第一个参数,必须与 api 的 GroupName 所使用的值保持一致。
                    //    s.SwaggerDoc(kv.Key, new OpenApiInfo()
                    //    {
                    //        Version = "v1",//标题的右上角显示
                    //        Title = $"{kv.Value} API",
                    //        Description = $"边检产品 {kv.Value} api 文档"
                    //    });
                    //}


                    //MyWebApiDemo.xml生成一下项目即可自动生成,无需手动添加
                    c.IncludeXmlComments("MyWebApiDemo.xml");
                });
            }
            services.AddControllers().AddNewtonsoftJson().AddXmlSerializerFormatters();
        }


        // 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();
            }


            if (Configuration["system:EnableSwagger"] == "1")
            {
                app.UseSwagger();
                app.UseSwaggerUI(c=> 
                {
                    string json = Configuration["system:ApiGroup"];
                    List list = JsonConvert.DeserializeObject>(json);
                    foreach (var item in list)
                    {
                        c.SwaggerEndpoint($"/swagger/{item.en}/swagger.json", item.cn);
                    }
                });
            }


            app.UseStaticFiles();


            app.UseRouting();


            //允许跨域
            app.UseCors("any");


            app.UseAuthorization();


            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name:"name",
                    pattern: "{controller=WeatherForecast}/{action=Get}/{id?}"
                    );
            });
        }
    }


    public class Item 
    {
        public string en { get; set; }
        public string cn { get; set; }
    }
}

四、Config.ini

[system]
#组
ApiGroup=[{"en":"group1","cn":"测试组一"},{"en":"group2","cn":"测试组二"},{"en":"WeatherForecast","cn":"气象服务"}]
#是否启用Swagger,1-启用,2-不启用
EnableSwagger=1

五、控制器Controller

using Microsoft.AspNetCore.Mvc;
using System;
using System.Data;


namespace MyWebApiDemo.Controllers
{
    [ApiController]
    //在控制器上面添加如下代码用于接口分组
    [ApiExplorerSettings(GroupName = "group2")]
    public class Test2Controller : Controllerbase
    {
        /// 
        /// 测试组2
        /// 
        /// 
        [HttpGet]
        [Route("api/[controller]/GetData2")]
        public DataTable GetData2()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("name");
            dt.Columns.Add("age", typeof(int));
            dt.Columns.Add("time", typeof(DateTime));
            dt.Rows.Add("张三", 19, "2020-10-19 12:34:56");
            dt.Rows.Add("李四", 56, DateTime.Now);
            return dt;
        }
    }
}

六、运行起来效果如下图:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5686311.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存