ASP.NET Core MVC中的路由(路由模板、属性路由)

本文介绍了ASP.NET Core MVC中的路由机制,包括默认的路由模板`app.UseMvcWithDefaultRoute();`,常规路由模板设置与EndpointRouting,以及属性路由的使用方法。强调了属性路由的高优先级,并提到了`libman`在ASP.NET Core MVC中的作用。

目录

一、常规路由模板设置及EndpointRouting(终结点路由)

1、默认路由模板:app.UseMvcWithDefaultRoute();

 2、常规路由模板设置及EndpointRouting(终结点路由)

二、使用属性路由(在实际使用它们的操作方法上方设置路由)

三、(番外):ASP.NET Core MVC中libman


Startup.cs文件中Configure()方法的代码设置HTTP请求处理管道。

一、常规路由模板设置及EndpointRouting(终结点路由)

1、默认路由模板:app.UseMvcWithDefaultRoute();

        默认路由模板规则是这样的:{controller=Home}/{action = Index}/{id?}

        其中{id?}中的?表示此参数是可选的(非必填)。

 2、常规路由模板设置及EndpointRouting(终结点路由)

推荐使用功能更丰富的UseEndpoints()中间件路由。

//1、启用默认路由
app.UseStaticFiles();
app.UseRouting();  
app.UseMvcWithDefaultRoute();
            


//2、自定义路由模板
app.UseStaticFiles();
app.UseRouting();
app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });

//3、使用UseEndpoints自定义路由模板 
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");

            });

二、使用属性路由(在实际使用它们的操作方法上方设置路由)

在Controller类中加这个:       

[Route("")]
[Route("Home")]
[Route("Home/Index")]

//这三个地址都是可以访问到 Index() 的

public ViewResult Index() 
        {
             return View();
        }

●  还有一点要说一下:控制器和操作方法名称不会影响 属性路由名称。也主就是说在controller类中像下面中这样写也是可以的,大不了用http://localhost:12345/abc/def访问。

        [Route("abc/def")]

        public ActionResult Details(int?id)
        {       
           return View();
        }

●  另有一点再说一下:属性路由支持多层,像下面这样

        [Route("")]
        [Route("Home")]
        [Route("Home/Index")]
        public ViewResult Index() 
        {
            return View();
        }


        [Route("Home/Details")]
        public ActionResult Details()
        {
           return View();
        }

●  精简写法:把“Home”拉出来:

[Route("Home")]     
public class HomeController : Controller 
{  

        [Route("/")]     //这个很重要,它让http://localhost:12345可以访问
        [Route("")]      //让让http://localhost:12345/home可以访问
        [Route("Index")] //让http://localhost:12345/home/index可以访问
        public ViewResult Index() 
        {
            return View();
        }


        [Route("Details")]  //让http://localhost:12345/home/details可以访问
        public ActionResult Details()
        {
           return View();
        }
}

●  再进一步:通过将标记放在方括号中来支持标记替换。标记[controller]和[action]将替换为定义路径的控制器名称和操作名称的值

[Route("[controller]")]      //标记替换为:控制器名称
public class HomeController : Controller 
{  

        [Route("/")]     
        [Route("")]      
        [Route("Index")] 
        public ViewResult Index() 
        {
            return View();
        }


        [Route("[action]")]     //标记替换为:操作名称
        public ActionResult Details()
        {
           return View();
        }
}

一个小插曲:

        因为一个写在控制类外面的属性路由没有删掉,从昨天到今天所有的路由规则一直无法生效,都快被搞死了。TMD,截图留念。但得到的知识是:属性路由的优先级高。

三、(番外):ASP.NET Core MVC中libman

 libman.json是库管理器清单文件,简化的内容如下

{
  "version": "1.0",                                     //当前的libman文件版本
  "defaultProvider": "cdnjs",                           //默认从哪个CDN网络下载文件
  "libraries": [
    { 
      "library": "twitter-bootstrap@5.1.3",             //要下载的前端包名称
      "destination": "wwwroot/lib/twitter-bootstrap/"   //存放库的文件路径地址
    }
  ]
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值