菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
408
0

ASP.NET.Core --Swagger+Route

原创
05/13 14:22
阅读数 3410

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

  

  

 

发表评论

0/200
408 点赞
0 评论
收藏
为你推荐 换一批