ASP.NET MVC 路由详解

事隔多年,其实也就一年啦,重新整理下ASP.NET MVC的相关知识。继续前面的内容,来说说路由。

Route

这是项目中App_Star/RouteConfig.cs 中的默认路由信息,上面有几个关键词:

  • 路由规则Route:需指定路由的格式,默认值,处理器
  • 路由数据RouteData:当前请求上下文匹配路由规则而到的对象,可在Action中通过RouteData.GetRequestString(“controller/action”)获取本次请求中控制器的行为的真实名称
  • 路由集合RouteCollection: 存放路由规则的集合 Collection,一个MVC项目中,可以配置多个路由规则,按照键值对的格式存储到路由集合中
  • 路由表RouteTable:类中包含静态的RouteCollection属性,完成所有路由规则的全局存储,在Global中完成注册 路由的注册

可以看到,在Global中使用RouteConfig.RegisterRoutes(RouteTable.Routes);来注册路由。 routes.MapRoute方法 routes.MapRoute()方法接收三个参数:

  • name 路由规则的名称(不能重复,作为键存放在RouteCollection)
  • url 路由规则,即访问格式 其中{controller}{action}不能修改
  • defaults 默认值

路由规则

重点说下路由规则,路由规则中{controller}{action}不能修改,因为这是MVC的默认字段。

路由规则的id字段,或者其他自定义字段,可以用于接收参数,便于请求的处理和参数的传递。

因为路由规则可以方便的传递和接受数据,因此在MVC中基本不适用GET方式来请求数据,一般使用路由匹配和POST提交两种方式。

行为参数模式通过路由传递的数据,不能被Request接收到,只能通过路由规则给定的格式,直接用ViewBag来接收。

注意:从SEO优化的角度来考虑,URL一般不要超过三层。

通常来讲,一个URL按照如下规则: localhost/{栏目}/{页面}

constraints - 约束

constraints 约束参数默认是没有的,但是可以自行添加:

  • 设置路由规则的约束
  • 类型为object,可以传递一个匿名对象,属性取决于规则中定义的参数
  • 参数是正则表达式字符串,如 controller= “^[a-z]+$”

自定义路由示例

url部分,不一定要使用/进行连接,使用-亦可(优化seo),如果使用-,则是强类型匹配。

约束参数使用了数值长度的限制,避免出错。

拓展

使用 RouteDebug 进行路由调试

总结

  • 路由规则可以注册多条
  • 路由规则的名称不能重复
  • 路由规则有顺序,并且按照顺序进行匹配
  • 子频道的路由规则配置应放在靠前
  • 路由规则可以设置约束
  • 路由规则匹配的控制器可以设置命名空间约束

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Devops专栏

Flask 使用 request 处理GET POST请求、上传文件

在Django框架开发中,request对象就是用来处理GET\POST请求的关键对象,而Flask框架也是一样的。

10220
来自专栏IT大咖说

藏在正则表达式里的陷阱,一个正则表达式导致CPU 利用率居高不下

我们可以看到所有的堆栈都指向了一个名为 validateUrl 的方法,这样的报错信息在堆栈中一共超过 100 处。通过排查代码,我们知道这个方法的主要功能是校...

8320
来自专栏从零开始学自动化测试

python测试开发django-71.自定义标签tag

django的模板里面有很多标签可以快速实现一些功能,比如{% url url_name%} 可以快捷的导入一个本地url地址。 上一篇我们可以自定义一些过滤器...

8920
来自专栏全能大脸猫

「网站优化」网站优化之移(shou)动(ji)端网站应该如何优化?

如今因为手机功能慢慢的完善以及手机的便于携带,使用手机上网的远远多于使用PC(电脑)端的用户要多很多。

5730
来自专栏彭湖湾的编程世界

来,我们手写一个简易版的mock.js吧(模拟fetch && Ajax请求)

比较符合我们使用习惯的,也许是下面这种mock方式,有一个专门的配置文件,管理请求的url和返回值。每个请求对应输出数组中的一个对象,对象的rule属性可以是一...

10330
来自专栏云爬虫技术研究笔记

面试官:你连RESTful都不知道我怎么敢要你?

看过很多RESTful相关的文章总结,参齐不齐,结合工作中的使用,非常有必要归纳一下关于RESTful架构方式了,RESTful只是一种架构方式的约束,给出一种...

10920
来自专栏毛毛v5

nginx配置图片文件jpg重定向到php进行权限校验

形如/image/vip/2019/11/xxx.jpg的文件被内部重定向到/jpg.php?s=/image/vip/2019/11/xxx.jpg,php文...

7610
来自专栏算法channel

70道NumPy 测试题

问题:在不使用硬编码的前提下创建以下模式。仅使用 NumPy 函数和以下输入数组 a。

7210
来自专栏技术栈

微服务API开放授权平台的设计与实现

本文所介绍的项目是一个基于oath2协议的应用,实现的的功能逻辑与QQ互联,微博开放平台类似,都是同一套认证授权流程。

12120
来自专栏Spring Boot 2.X 系列

Spring Boot 2.X(十七):应用监控之 Spring Boot Admin 使用及配置

Spring Boot Admin 是 Spring Boot 应用程序运行状态监控和管理的后台界面。最新UI使用vue.js重写。

8820

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励