zoukankan      html  css  js  c++  java
  • ASP.NET.Core --Swagger+Route

    ps:环境是AspNet.Core3.1 WebApi项目

    1、Nuget 引入 Swashbuckle.AspNetCore 包

          注意:AspNet.Core3.1项目 引入Swashbuckle.AspNetCore 包必须是v5.0 以上的包。

    2、Startup 类下的 ConfigureServices方法 引入 Swagger

     services.AddSwaggerGen(c =>{
                    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });             
     });

    3、Startup 类下的 Configure里 使用 Swagger

    //启用中间件服务生成Swagger作为JSON终结点
    app.UseSwagger();
    //启用中间件服务对swagger-ui,指定Swagger JSON终结点
    
    app.UseSwaggerUI(c=> {
                    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
                    c.RoutePrefix = string.Empty;
    });

    4、终结点里添加MapConTrollers();

    app.UseEndpoints(endpoints =>{
                    endpoints.MapControllers();
    });

    5、控制器添加路由和api特性

    6、Route 可以添加约束

            /// <summary>
            /// 根据id获取UserName
            /// </summary>
            /// <param name="id">最大20</param>
            /// <returns></returns>
            [HttpGet("{id:max(20)}")]
            public string GetUseName(int id)
            {
                var result = _userService.GetUserName();
                return result;
            }

     效果如下图所示:

    6、自定义约束

        6.1:需要继承 IRouteConstraint 接口 并且实现 里面唯一的 Match方法

     

        public class MyRouteConstraint : IRouteConstraint
        {
            /// <summary>
            /// 
            /// </summary>
            /// <param name="httpContext">当前请求的上下文</param>
            /// <param name="route">路由对象</param>
            /// <param name="routeKey">当前路由参数的key</param>
            /// <param name="values">RouteValueDictionary 则是控制器、方法、参数的键值对</param>
            /// <param name="routeDirection">RouteDirection枚举则是判断是不是url传入寻找方法</param>
            /// <returns></returns>
            public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
            {
                if (RouteDirection.IncomingRequest == routeDirection)
                {
                    var v = values[routeKey];
                    if (v.ToString() == "lwq")
                    {
                        return true;
                    }
                }
                return false;
            }
        }

      

      6.2:在 Startup 类下注入 MyRouteConstranint 约束

     services.AddRouting(options =>{
                    options.ConstraintMap.Add("MyRouteConstranint", typeof(MyRouteConstraint));
     });

      

           6.3:接口控制器使用自定义约束

         /// <summary>
            /// 判断是不是lwq
            /// </summary>
            /// <param name="name">必须是lwq</param>
            /// <returns></returns>
            [HttpGet("{name:MyRouteConstranint}")]
            public bool IsLwq(string name)
            {
                return true;
            }

    效果如下图所示:

    7、如果想如上图所示,添加备注提示,则需要在项目右键属性 生成 xml 文档文件打√,AddSwaggerGen里配置路径。

      

      

  • 相关阅读:
    在线学习Java免费资源推荐
    pycharm控制台输出乱码
    服务器质检文件传输——scp
    git使用小结
    更换python依赖包的下载路径
    查看某一时间段的cpu使用情况,sar(监控系统性能)
    运行脚本:‘$’ ’: 未找到命令’错误
    bash脚本,获取当前日期或时间作为参数
    installing new crontab-添加调度任务成功
    Mysql-删除数据表-三种方式详解
  • 原文地址:https://www.cnblogs.com/lwqstyle/p/13731361.html
Copyright © 2011-2022 走看看