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里配置路径。

      

      

  • 相关阅读:
    nethogs命令执行报异常的解决方法
    性能监控
    Linux图形化监控网络流量:speedometer查看流量
    JMeter监控Slave机器是否执行
    安全测试robots
    在ASP.NET MVC4中实现同页面增删改查,无弹出框02,增删改查界面设计
    在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建
    报错:非介入式客户端验证规则中的验证类型名称必须唯一。下列验证类型出现重复
    ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象
    在ASP.NET MVC中使用Knockout实践09,自定义绑定
  • 原文地址:https://www.cnblogs.com/lwqstyle/p/13731361.html
Copyright © 2011-2022 走看看