.net core 5 路由Route

本文详细介绍了ASP.NET Core中的路由配置,包括默认路由、固定路由、正则表达式约束和范围约束。此外,还展示了如何使用MapGet直接处理请求,避免经过MVC。同时,特性路由的使用,如隐藏真实路径、参数约束也被提及,以及通过Host特性进行端口匹配。这些内容有助于理解ASP.NET Core中请求处理的灵活性和控制力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转发Http请求,可以定义一个规则,这些规则就是用来匹配请求到底让谁来帮助处理

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseEndpoints(endpoints =>
            {
                //endpoints.MapControllerRoute(
                //    name: "default",
                //    pattern: "{controller=Home}/{action=Index}/{id?}");
                    
                //路由匹配从端口号后面开始匹配;
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller}/{action}/{id?}",  //id? 可以为空
                    defaults: new
                    {
                        controller = "Sixth",
                        action = "Index"
                    });

                //固定路由:严格匹配字符串hello
                endpoints.MapControllerRoute(
                   name: "hello",
                   pattern: "hello/hello",
                   defaults: new
                   {
                       controller = "Sixth",
                       action = "Index"
                   });

                //固定路由
                endpoints.MapControllerRoute(
                   name: "About",
                   pattern: "About/{action}",
                   defaults: new
                   {
                       controller = "Sixth",
                       action = "About"
                   });

                //https://localhost:5001/sixth/Index?year=2021&month=9&day=14
                //https://localhost:5001/sixth/Index/2021_09_14
                //正则路由
                endpoints.MapControllerRoute(
                   name: "regex",
                   pattern: "{controller}/{action}/{year}_{month}_{day}",
                   defaults: new { controller = "Sixth", action = "Index" },
                   constraints: new { year = "^\\d{4}$", month = "^\\d{2}$", day = "^\\d{2}$" });


                //https://localhost:5001/sixth/IndexEx/2021-07
                ///约束:year在2019,2021之间
                ///      month在6,12之间
                endpoints.MapControllerRoute(
                    name: "range",
                    pattern: "{controller=Sixth}/{action=IndexEx}/{year:range(2019,2021)}-{month:range(6,12)}");
            });
        }

以上都是要通过匹配以后,要匹配到MVC中去;

MapGet/MapPost等:请求来了,他匹配到以后,可以把自己定义的处理请求的逻辑给直接放进来,而不用进入到MVC中去。
可以定义个规则:把具体需要处理的逻辑自己封装–不走MVC

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseEndpoints(endpoints =>
            {
                //MapGet:请求来了,他匹配到以后,可以把自己定义的处理请求的逻辑给直接放进来,而不用进入到MVC中去。。。
                //1.可以定义个规则:把具体需要处理的逻辑自己封装--不走MVC
                //2.下载固定的模板文件,就没有必要去MVC中去处理,可以自己读取文件直接响应给请求方
                endpoints.MapGet("/Richard", async context =>
                {
                    //在这里可以自己定义如何处理本次请求;
                    await context.Response.WriteAsync($"This is Richard");
                });
            });
        }

特性路由

        //特性路由:优先匹配;
        //作用
        //1.调整访问的路径--隐藏真实的路径
        //2.可以约束参数变量
        [Route("/Item/{id:int}.html")] 
        public IActionResult PageInfo(int id)
        {
            string des = $"controller={this.HttpContext.Request.RouteValues["controller"]}&action={this.HttpContext.Request.RouteValues["action"]}&Id={this.HttpContext.Request.RouteValues["id"]}";
            base.ViewBag.Des = des;
            return View();
        }

        [Route("/Item/{Name:minLength(5)}.html")]
        public IActionResult UserInfo(string Name)
        {
            string des = $"controller={this.HttpContext.Request.RouteValues["controller"]}&action={this.HttpContext.Request.RouteValues["action"]}&Id={this.HttpContext.Request.RouteValues["id"]}";
            base.ViewBag.Des = des;
            return View();
        }

        //严格匹配端口号:
        //如果项目启动监听的端口是8002,就可以匹配,如果不是这个方法就访问不到
        [Host("*:8002")]
        public IActionResult HostInfo(int id)
        {
            string des = $"controller={this.HttpContext.Request.RouteValues["controller"]}&action={this.HttpContext.Request.RouteValues["action"]}&Id={this.HttpContext.Request.RouteValues["id"]}";
            base.ViewBag.Des = des;
            return View();
        }

路由规则基础
在这里插入图片描述
路由约束
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值