ASP.NET 路由
一. 什么是路由?
一种URL(统一资源定位符)的体现方式,将URL映射到方法的调用。
转变观念:(URL未必是指Web服务器上的静态资源文件)。
二. 为什么使用路由?
- 如同规范的代码缩进一样,这是对代码质量的提高,是对URL的重视;
- 消除必须使用物理文件映射 URL 的弊端;
- 防止注入式攻击,提高安全性。传统的URL和磁盘上的内容有着直接对应的关系,通过URL就可以确定该站点的目录结构,路由是把请求映射到控制器的操作,较为安全;
- 可以约束URL的各个部分。
三. 如何定义路由?
创建一个ASP.NET MVC项目,打开应用程序文件(Global.asax.cs),可以看到在Application_Start方法中调用了RouteConfig.RegisterRoutes方法,该方法就是集中控制路由的地方。
F12转到方法定义,它在/App_Start/RouteConfig.cs文件中。
一.特性路由
调用MapMvcAttributeRoutes()方法启用特性路由:
特性路由,顾名思义,通过特性来定义路由。
在Controllers中添加一个空的Home控制器。
1.为方法添加一个Route特性
(URL为/Index的请求时,就会运行Index方法)
(通过 / 、/Index 都能访问)
2.路由值(动态路由)
通过花括号创建了一个占位符,如:/Index/xiaoming 就会匹配到这个路由。
问题:以下情况下' /Index '会匹配那个路由呢?
结论:静>动
3.控制器路由
如果一个方法写一个路由( [Route(ControlName/ActionName)] )的话,就会有重复的代码,这时候就可以在控制器(类)上添加路由特性。
使用特殊路由参数action
(可以通过 /Home/Index 、/Home/About 分别访问Index和About方法)
通过=号赋值的方式为路由参数提供默认值
(请求为 /Home 时默认请求 Index)
通过?号为路由定义可选参数
这时候如果通过/Home/1 请求的话会提示404,因为如果URL为两段的话它会把 ‘1’匹配到 action 。
4.路由约束
这个时候你请求' /About/2 ' 的时候就会提示请求不明确
通过约束解决
(时候只用当参数为int值时才会匹配第一个About)
像这样放到路由模板中的约束叫内联约束,还有很多:
二 . 传统路由
回到RegisterRoutes方法,清空代码,添加一个传统路由
controller和action是特殊参数,它们映射到控制器和方法,在传统路由中是必须参数,没有的话会报500的错误,提示不包括所需的“controller”路由值。
传统路由有更灵活的路由语法规则
{controller}/{action}/{id} {controller}-{action}-{id} {controller}-{action}.{id}
...
上面这些都是有效的路由。
MapRoute的第三个参数由于设置默认值
public static void RegisterRoutes(RouteCollection routes) { //映射指定的URL路由 routes.MapRoute("simple", "{controller}/{action}/{id}",new { id= UrlParameter.Optional, //设置id参数为可选参数 action= "Index" //设置action参数的默认值为Index }); }
MapRoute的第四个参数由于设置路由值的约束
原文地址:https://www.cnblogs.com/MedlarCanFly/p/11402184.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 深度学习中7种最优化算法的可视化与理解
- 【基础详解】手磕实现 CNN卷积神经网络!
- 直播间源码android音视频开发
- 批量转化字符编码
- JAR项目部署
- java基础:枚举(你木有见过的船新版本)
- elasticSearch学习(九)
- Linux工具---iptraf 实时地监视网卡流量
- Linux工具---ipcalc简单的IP地址计算器
- 七、玩转Git三剑客-使用GitHub进行团队协作
- 关于mysql的join
- 微信公众号接入智能聊天机器人
- SAP UI5 Diagnostics工具里一个使用面向切片编程(AOP)的一个例子
- SAP CDS view自学教程之九:cube view和query view的实现原理
- 一点多发FTP客户端设计