asp.net MVC中的AppendTrailingSlash以及LowercaseUrls

asp.net MVC是一个具有极大扩展性的框架,可以在从Url请求开始直到最终的html的渲染之间进行扩展,所以要学好还是需要了解框架的运行原理,推荐Artech.

今天我们回忆的不是MVC中的filter,也不是Controller的激活或者是Action的执行,或者是Url路由RouteData的生成,我们来回忆的是RouteTable.Routes  ,即全局路由表的两个属性。AppendTrailingSlash以及LowercaseUrls。

AppendTrailingSlash的作用就是是否在生成的Url末尾添加/ 斜线(如果没有存在的话)。设置为true,则会在生成的Url末尾添加斜线,否则不会自动添加。

LowercaseUrls的作用就是是否将生成的Url 转换成小写形式。因为对于搜索引擎来说,可能Url地址的大小写会不同对待。

这两个属性作用的是生成的Url,即会通过RouteTable.Routes.GetVirtualPath()通过传入的请求上下文RequestContext来获取Url。

可能你会说,如果我想实现生成的Url小写,那么我就将LowercaseUrls设置为true,就可以,事实真的是这样的吗?我们来做个试验。

注册的Url路由:

 1  public class RouteConfig
2 {
3 public static void RegisterRoutes(RouteCollection routes)
4 {
5 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
6 routes.AppendTrailingSlash = true;//是否添加斜线 分隔符
7 routes.LowercaseUrls = true;//Url是否小写
8 routes.MapRoute(
9 name: "Default",
10 url: "{controller}/{action}/{id}",
11 defaults: new { controller = "Home", action = "index", id = UrlParameter.Optional },
12 namespaces: new string[] { "MvcApplication3.Controllers" }
13 );
18 }
19 }

对应的Action方法:

1   [ActionName("List")]
2 public ActionResult List()
3 {
4 ViewBag.employees = repository.EmployeeRepository.GetEmployees("");///是获取一个几个列表
5 return View();
6 }

对应的View:

 1 @{
2 Layout = null;
3 }
4
5 <!DOCTYPE html>
6
7 <html>
8 <head>
9 <meta name="viewport" content="width=device-width" />
10 <title>List</title>
11 </head>
12 <body>
13 <div>
14 @{
15 List<MvcApplication3.Models.Employee> listEmployee = ViewBag.Employees as List<MvcApplication3.Models.Employee>;
16 }
17 @{
18 if (listEmployee != null)
19 {
20 <ul>
21 @{
22
23 foreach (var item in listEmployee)
24 {
25 <li>
26 @Html.RouteLink("RouteLink"+item.Name, "Default", new { action = "Detail", controller = "Home", id = item.Id })
27 <br />
28 @Html.ActionLink("ActionLink"+item.Name, "DETAIL", "home", new { id = item.Id }, new { target = "_blank" })
29 </li>
30 }
31 }
32 </ul>
33 }
34 else
35 {
36
37 <div>列表中无数据显示</div>
38 }
39 }
40 </div>
41 </body>
42 </html>

我们在视图中通过Html.RouteLink以及Html.AtionLink来分别生成两个超链接。执行的结果是什么呢?

1  <li>
2 <a href="/home/detail/0/">RouteLinkguozhiqi0</a> <!--这是通过RouteLink生成的Url-->
3 <br />
4 <a href="/home/DETAIL/0" target="_blank">ActionLinkguozhiqi0</a> <!--这是通过ActionLink生成的Url-->
5 </li>

通过上面的结果我们可以看到一个奇怪的现象,就是通过Html.RouteLink()生成的Url应用了我们设置的属性,即Url地址全局小写,并且末尾有一个斜线分隔符。

但是ActionLink却没有在末尾添加斜线,也没有全部小写。这究竟是为什么呢?如果有人知道,麻烦告知一下具体区别。谢谢。

所以如果我们想生成全部小写并且末尾有斜线分隔符的Url地址,就采用RouteLink或者重写Route的getVirtualpathData()来将所有大写字母小写化。

我又回来了,回到了技术最前线,
 
分类: Asp.Net MVC 3

asp.net MVC中的AppendTrailingSlash以及LowercaseUrls的更多相关文章

  1. 谈谈asp.net MVC中的AppendTrailingSlash以及LowercaseUrls ,你还记得吗?

    asp.net MVC是一个具有极大扩展性的框架,可以在从Url请求开始直到最终的html的渲染之间进行扩展,所以要学好还是需要了解框架的运行原理,推荐Artech. 今天我们回忆的不是MVC中的fi ...

  2. MVC中的AppendTrailingSlash以及LowercaseUrls

    asp.net MVC是一个具有极大扩展性的框架,可以在从Url请求开始直到最终的html的渲染之间进行扩展,所以要学好还是需要了解框架的运行原理,推荐Artech. 今天我们回忆的不是MVC中的fi ...

  3. Asp.net mvc 中的路由

    在 Asp.net mvc 中,来自客户端的请求总是针对某个 Controller 中的 Action 方法,因此,必须采用某种机制从请求的 URl 中解析出对应的 Controller 和 Acti ...

  4. 2.ASP.NET MVC 中使用Crystal Report水晶报表

    上一篇,介绍了怎么导出Excel文件,这篇文章介绍在ASP.NET MVC中使用水晶报表. 项目源码下载:https://github.com/caofangsheng93/CrystalReport ...

  5. 关于 ASP.NET MVC 中的视图生成

    在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...

  6. 在Asp.Net MVC 中配置 Serilog

    Serilog 是一种非常简便记录log 的处理方式,使用Serilog可以生成本地的text文件, 也可以通过 Seq 来在Web界面中查看具体的log内容. 接下来就简单的介绍一下在Asp.Net ...

  7. 如何在 ASP.NET MVC 中集成 AngularJS(3)

    今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...

  8. 如何在 ASP.NET MVC 中集成 AngularJS(2)

    在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...

  9. 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章  ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...

随机推荐

  1. 常见的FPGA内串行数据采样的方式

    总结下常见的对串行数据采样的三种方式: 1. 全采样存储方式: 采用过采样,用过采样时钟,用移位寄存器移位,把每次采样值都存起来.采用高速的过采样时钟运行. 然后等待触发条件,(就是找到数据的起始点条 ...

  2. 批处理添加iis wpg、users对IIS的访问权限

    原文 批处理添加iis wpg.users对IIS的访问权限 上一篇,我们学习了如何使用批处理删除各种帐户在IIS中的访问权限.下面,我们来看看,如何通过批处理添加iis_wpg.users对IIS的 ...

  3. 在 Windows Server 2008 R2 上安装 IIS 7.5

    原文 在 Windows Server 2008 R2 上安装 IIS 7.5 默认情况下,Windows Server(R) 2008 R2 上不安装 IIS 7.5.可以使用服务器管理器中的“添加 ...

  4. Thinkpad E431 解决无线网卡无法开启

    Thinkpad E431无线网卡无法开启 现象再现: Thinkpad E431新机,原装win8系统,使用win7光盘换为win7系统,官方下载驱动程序,安装后无线上网正常. 点击功能软件Acce ...

  5. Windows平台Oracle使用USE_SHARED_SOCKET角色

    前两天在一个朋友QQ集团提出了一个问题.背景例如,下面的: 继续问后,有例如以下回复: 1.对方server连接无问题. 2.从client能够telnetserver的1521port. 3.tns ...

  6. 一张地图告诉你,只JavaScript不够!

    这将是JavaScript语法,你真的会一JavaScript嘛.看看这个图片!超好用JavaScript一本书的摘录游.熊儿.快去学习! 版权声明:本文博客原创文章.博客,未经同意,不得转载.

  7. tmp1

    program1: Line # Mem usage Increment Line Contents================================================ 2 ...

  8. Redis源代码分析(十一年)--- memtest内存测试

    今天,我们继续redis源代码test下测试在封装中的其它文件.今天读数memtest档,翻译了,那是,memory test 存储器测试工具..可是里面的提及了非常多东西,也给我涨了非常多见识,网上 ...

  9. Android物业动画研究(Property Animation)彻底解决具体解释

     前p=1959">Android物业动画研究(Property Animation)全然解析具体解释上已经基本展示了属性动画的核心使用方法: ObjectAnimator实现动画 ...

  10. API接口开发 配置、实现、测试

    Yii2 基于RESTful架构的 advanced版API接口开发 配置.实现.测试 环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到 ...