1、使用{parameter}做模糊匹配

{parameter}:花括弧加任意长度的字符串,字符串不能定义成controller和action字母。默认的就是模糊匹配。

例如:{admin}。

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing; namespace MVCURLMatch
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // 1、使用parameter做模糊匹配
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}

2、使用字面值做精确匹配

字面值即一个常数字符串,外面不能有{}。这个字符串可以在大括弧与大括弧之间,也可以在最前面和最后面。

例如:admin/{controller}/{action}/{id}

URL1:/admin/home/index/1  可以与上面定义的路由匹配。

URL2:/home/index/1             不可以与上面定义的路由匹配(缺少字面量admin)

// 2、使用字面量做精确匹配
routes.MapRoute(
name: "Default2",
url: "admin/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

URL里面缺少admin时的运行结果:

正确的URL:

注意:这时候admin也不区分大小写。

3、不允许连续的URL参数

两个花括弧之间没有任何的字面值是不可以的(两个花括弧之间必须跟上一个固定的字母或者符合,否则无法区分是哪个参数)。

{language}-{country}/{controller}/{action}/{id}  正确

{language}{country}/{controller}/{action}/{id}   错误

// 3、不允许连续的URL参数
routes.MapRoute(
name: "Default3",
url: "{language}-{country}/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

运行结果:

可以使用上篇文件中介绍的获取URL参数值的方式获取language和country参数的值,这里不在讲述如何获取。

4、使用*号匹配URL剩余部分

使用*来匹配URL剩余的部分,如*plus放在一个表达式的尾部,最后尾部的URL部分会保存为plus为键名的字典值。

routes.MapRoute(
name: "Default4",
url: "{controller}/{action}/{id}/{*plus}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

在Index方法里面输出plus参数的值:

public ActionResult Index(string plus)
{
string value = string.Format("plus={0}", plus);
ViewData["msg"] = value;
return View();
}

运行结果:

5、URL贪婪匹配

在URL表达式中有一种特殊的情况:就是URL表达式可能和实际的URL有多种匹配的情况,这时候遵守贪婪匹配的原则。

从上图中可以看出,贪婪匹配的原则即从后往前匹配URL。

routes.MapRoute(
name: "Default5",
url: "{controller}/{action}/{id}/{filename}.{ext}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

在index方法里面分别获取filename和ext参数的值,并输出到页面

示例代码下载地址:https://pan.baidu.com/s/1q_tXchAgHICoMn3q4oBpQA

MVC教程三:URL匹配的更多相关文章

  1. ASP.NET MVC教程三:ASP.NET MVC部署方式

    ASP.NET MVC编写的程序需要部署到IIS上面才能进行访问,部署方式分为两种. 一.直接用源代码部署 第一种方式可以直接使用源代码进行部署.部署步骤: 1.新建网站 在IIS里面选择网站,然后右 ...

  2. 2017.3.31 spring mvc教程(三)拦截器

    学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...

  3. Spring MVC 教程,快速入门,深入分析

    http://elf8848.iteye.com/blog/875830/ Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: ...

  4. 【ASP.NET MVC 牛刀小试】 URL Route

    例子引入 先看看如下例子,你能完全明白吗? using System; using System.Collections.Generic; using System.Linq; using Syste ...

  5. Spring MVC 教程,快速入门,深入分析[1-11]

    资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf SpringMVC核心配置文件示例.rar     作者:赵磊 博客:http://elf8848.iteye.com   ...

  6. [转]Spring MVC 教程,快速入门,深入分析

    原文地址:http://elf8848.iteye.com/blog/875830 目录 一.前言 二.spring mvc 核心类与接口 三.spring mvc 核心流程图 四.spring mv ...

  7. Spring MVC教程——检视阅读

    Spring MVC教程--检视阅读 参考 Spring MVC教程--一点--蓝本 Spring MVC教程--c语言中午网--3.0版本太老了 Spring MVC教程--易百--4.0版本不是通 ...

  8. 自学MVC看这里——全网最全ASP.NET MVC 教程汇总

    MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从 ...

  9. ASP.NET MVC 路由(三)

    ASP.NET MVC路由(三) 前言 通过前两篇的学习会对路由系统会有一个初步的了解,并且对路由系统中的Url规则有个简单的了解,在大家的脑海中也有个印象了,那么路由系统在ASP.NETMVC中所处 ...

随机推荐

  1. Java语言中的面向对象特性:封装、继承、多态,面向对象的基本思想(总结得不错)

    Java语言中的面向对象特性(总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道jav ...

  2. IE浏览器中,设置指定程序查看源文件

    第一步:     先按Ctrl+R,输入regedit进入注册表     依次找到 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explo ...

  3. iOS - CFNetwork 的使用

    1.CFNetwork CFNetwork 是基于 OS 层 BSDSocket 封装(纯 C),用于网络通信,早期的网络请求框架 ASIHTTPRequest 就是基于 CFNetwork 进行的封 ...

  4. 常用IP核

    前言 记录自己用到的模块,随时补充. 主要分类: 一.常用模块 1-FIFO FIFO分为两种,一是输入输出时钟相同(Common clock)的 fifo ;二是输入输出时钟不相同(Independ ...

  5. 自己动手写shell命令之write

    Linux下write命令同意用户跟其它终端上的用户对话.用c语言实现shell命令write.代码例如以下: #include <stdio.h> #include <fcntl. ...

  6. js获取日期实例之昨天今天和明天、后天

    本文介绍了js获取日期的方法,可以获取前天.昨天.今天.明天.后天. 代码: <html> <head> <meta http-equiv="Content-T ...

  7. [na]PKI公钥处理思路

    前提申明: 在使用任何基于RSA服务之前,一个实体要真实可靠的获取其他实体的公钥. 1,一个可以确认公钥身份的方案:[离线确认] 主:B做同样的事情得到A的公钥. 但是这种方法扩展性差,不可行. 2, ...

  8. 苹果开发小记(一):NSString 的比较用法

    转自:http://blog.sina.com.cn/s/blog_897dd7be0100teh6.html 做了几个月的苹果,很多的思想方法都可以遵循一定规律来做的.NSString 比较字符串, ...

  9. 关于locate这个NB命令我不得不深入的学习

    先看看locate的安装包和生成的文件: [root@NB mlocate]# which locate /usr/bin/locate [root@NB mlocate]# rpm -qf /usr ...

  10. Flink articles

    http://ictlabs-summer-school.sics.se/2015/slides/flink-advanced.pdf http://henning.kropponline.de/20 ...