路由和终结点

本文详细介绍了如何在项目中集成Swagger,包括配置步骤、路由模板和约束应用、URL生成,以及自定义路由约束。从添加Swagger包到生成XML文档,为API开发者提供了一站式的Swagger配置教程。
摘要由CSDN通过智能技术生成

一、添加Swagger包

1.ConfigureServices中注入

代码如下(示例):

 services.AddSwaggerGen(gen => {
                gen.SwaggerDoc("v1.0", new Microsoft.OpenApi.Models.OpenApiInfo() { Title="My Api",Version="1.1"});
                string file = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                string path = Path.Combine(AppContext.BaseDirectory, file);
                gen.IncludeXmlComments(path);
            });

2.Configure中配置Swagger

代码如下(示例):

app.UseSwagger();
            app.UseSwaggerUI(optons => {
                optons.SwaggerEndpoint("/swagger/v1.0/swagger.json","My Api 1.0");
            });

3.输出Xml文档

在项目属性->生成中选择
在这里插入图片描述
如果不选XML文档文件,IncludeXmlComments就找不到路径,Swagger的文档就无法生成。

二、路由注册方式

1.路由模板的方式

代码如下(示例):

 [HttpGet("{name:required}")]
        [Obsolete]
        public bool Require(string name)
        {
            return true;
        }

2.RouteAttribute 方式

  1. 实现IRouteConstraint接口
    代码如下(示例):
public class CustomRouteConstraint : IRouteConstraint
    {
        public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
        {
            if (routeDirection == RouteDirection.IncomingRequest)
            {
                var value = values[routeKey];
                return long.TryParse(value.ToString(), out long v);
            }
            return false;
        }
    }
  1. 在ConfigureService中添加路由规则映射

代码如下(示例):

services.AddRouting(routeOpt => {
                routeOpt.ConstraintMap.Add("IsLong", typeof(CustomRouteConstraint));
            });

3.Api调用
代码如下(示例):

 [HttpGet("{id:IsLong}")]
        public bool ExistClient(string id)
        {
            return true;
        }

三、路由约束

1.是否必选

代码如下(示例):

  [HttpGet("{name:required}")]
        [Obsolete]
        public bool Require(string name)
        {
            return true;
        }

2.正则表达式

代码如下(示例):

  [HttpGet("{number:regex(^\\d{{3}}$)}")]
        public bool ChkIsNumber(string number)
        {
            return true;
        }

3.范围约束

代码如下(示例):

 [HttpGet("{id:max(20)}")]
        public bool Max([FromRoute] long id, [FromServices] LinkGenerator linkGenerator)
        {
            string path = linkGenerator.GetPathByAction(HttpContext, action: "Require", controller: "Client"
                , values: new { name = "fisea" }
                );

            string url = linkGenerator.GetUriByAction(httpContext: HttpContext, action: "Require", controller: "Client",
                values: new { name = "fisea" });
            return true;
        }

4.自定义 IRouteConstraint

代码如下(示例):

[HttpGet("{id:IsLong}")]
        public bool ExistClient(string id)
        {
            return true;
        }

四、URL 生成

1.LinkGenerator来生成url

代码如下(示例):

  string url = linkGenerator.GetUriByAction(httpContext: HttpContext, action: "Require", controller: "Client",
                values: new { name = "fisea" });

2.LinkGenerator来生成path

代码如下(示例):

 string path = linkGenerator.GetPathByAction(HttpContext, action: "Require", controller: "Client"
                , values: new { name = "fisea" }
                );

五、源码下载

下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值