首页 > Web开发 > 详细

Asp.Net Core 自定义 Route 检查

时间:2020-05-10 22:10:22      阅读:63      评论:0      收藏:0      [点我收藏+]

创建 Asp.Net Core API项目

nuget 引用 NSwag.AspNetCore ,这个是一个api文档包 Startup类注册服务
ConfigureServices方法

            services.AddSwaggerDocument(config =>
            {
                config.PostProcess = document =>
                {
                    document.Info.Version = "v1";
                    document.Info.Title = "ToDo API";
                    document.Info.Description = "A simple ASP.NET Core web API";
                    document.Info.TermsOfService = "None";
                    document.Info.Contact = new NSwag.OpenApiContact
                    {
                        Name = "Shayne Boyer",
                        Email = string.Empty,
                        Url = "https://twitter.com/spboyer"
                    };
                    document.Info.License = new NSwag.OpenApiLicense
                    {
                        Name = "Use under LICX",
                        Url = "https://example.com/license"
                    };
                };
            });

Configure方法

       app.UseOpenApi();
       app.UseSwaggerUi3();

创建API控制器 TestController

    [ApiController]
    [Route("[controller]")]
    public class TestController : ControllerBase
    {


        private readonly ILogger<TestController> _logger;

        public TestController(ILogger<TestController> logger)
        {
            _logger = logger;
        }

        [HttpGet("RouteTest/{no:StringLength20}")]
        public IActionResult RouteTest(string no)
        {
            return Ok();
        }
    }

创建 StringLength20 路由检查类 RouteDirection有两种枚举类型分对应IncomingRequest、UrlGeneration 来自客户端的 URL。和 根据路由正在创建的 URL。
下面是官方的描述
技术分享图片

          public class StringLength20 : IRouteConstraint
    {
        public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
        {
            if (RouteDirection.UrlGeneration == routeDirection)
            {
                string v = values[routeKey].ToString();
                if (v.Length == 20)
                {
                    return true;
                }
            }
            if (RouteDirection.IncomingRequest == routeDirection)
            {
                string v = values[routeKey].ToString();
                if (v.Length == 20)
                {
                    return true;
                }
            }

            return false;
        }
    }

注册路由的检查服务

          services.AddRouting(routing => {
                routing.ConstraintMap.Add("StringLength20", typeof(StringLength20));
            });

可以看到 api的路由检查枚举值是IncomingRequest
技术分享图片
检查未通过返回404
技术分享图片

有同学会有疑问RouteDirection.UrlGeneration 的作用率,动态路由的时候你就用得上了

Asp.Net Core 自定义 Route 检查

原文:https://www.cnblogs.com/SuperDust/p/12865313.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!