zoukankan      html  css  js  c++  java
  • asp.net MVC中的AppendTrailingSlash以及LowercaseUrls

    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
  • 相关阅读:
    30个php操作redis经常用法代码样例
    Android语音播报、后台播报、语音识别
    Gym 100733J Summer Wars 题解:灵活运用扫描线的思想
    如何运营一个软件微社区
    关于迭代测试的一些思考
    DirectUI界面编程(五)WindowImplBase的使用
    Zxing实现在线二维码生成程序
    Java二维码生成与解码工具Zxing使用
    DirectUI界面编程(四)界面布局详解
    软件开发中的资源管理
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3785328.html
Copyright © 2011-2022 走看看