(译)ASP.NET MVC Routing 概述

2023-05-16

ASP.NET MVC Routing 概述

在本篇教程中,你将会了解到 ASP.NET MVC 中一个重要的组件。这个组件叫做 ASP.NET Routing,它负责将客户端请求的路径映射到特定的一个类(Controller)的一个函数(Action)。并且在教程的结尾,你将会掌握一个标准路由是如何映射到特定类的特定函数。

使用默认的路由表

当你创建一个新的 ASP.NET MVC 应用程序的时候,就已经默认地在两个地方配置了 ASP.NET Routing

首先,你可以在应用程序的配置文件(Web.config)找到与 ASP.NET Routing 有关的配置。这些节点如下所示:

l  system.web.httpModules

l  system.web.httpHandlers

l  system.webserver.modules

l  system.webserver.handlers section

在没有了解他们之前,请不要随意的更改或删除他们,否则可能导致你的应用程序或 ASP.NET Routing无法正常的工作。

其次更为重要的是,一张路由表是在全局文件(Global.asax)中创建的。这个特殊文件包含了ASP.NET 应用程序生命周期以及一些HTTP处理的事件。例如我们关注的路由表就是在 Application_Start事件中创建的。

Listing 1 – ~/Global.asax.cs

using System.Web.Mvc;

using System.Web.Routing;

namespace MVCTestDemo

{

    public class MvcApplication : System.Web.HttpApplication

    {

        public static void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(

                "Default",                                              // 路由名

                "{controller}/{action}/{id}",                           // URL参数

                new { controller = "Home", action = "Index", id = ""// 默认值

            );

        }

        protected void Application_Start()

        {

            RegisterRoutes(RouteTable.Routes);

        }

    }


}  

当你的 ASPNET MVC应用程序首次启动的时,Application_Start()将会被系统自动调用。这个函数调用了一个静态函数RegisterRoutes(),从代码中可以看出,这个函数创建了一个路由表

让我们来分析下 RegisterRoutes() 函数,这个函数包含了一个名为 Default 的路由器,这个路由器映射的第一部分是 Url Controller 名称。第二个部分将指示要访问这个 Controller下的哪一个 Action。而最后一个 id,则是指示要传递给 Action 的参数。

想像一下,当你在浏览器中键入如下所示的 URL 地址(除了主机和端口):

/Home/Index/3

聪明的你可能已经看出,这样的地址意味着如下:

controller = Home

action = Index

id = 3

没错,参照上面的代码,当你请求这样的URL时,就是这样的“解释”的。更深一步,这样的URL地址,就像是客户端调用了这样的函数。

HomeController.Index(3)

当然,这样只是一个示例。准确的说,前面的HomeController是一个我们定义的类,这个类包含一个Index( int id ) 函数。当运行的时候,ASP.NET MVC将会实例化一个HomeController,从而调用,并传递参数。

再来尝试一下,当你在请求这样的地址呢?

/Home

很显然,你并没有给予系统Actionid部分。这个时候,我们回顾下上面的Listing 1的代码清单。是的,很清晰的告诉系统:

l  当没有Controller时,将这个部分默认Home

l  当没有Action时,将这个部分默认Index

l  最后,当没有给定id时,将会默认一个空的字符串。

如果你没有理解这个部分,你参考下Listing 2的代码。

Listing 2 – ~/Controllers/HomeController.cs

using System.Web.Mvc;

namespace MVCTestDemo.Controllers

{

    [HandleError]

    public class HomeController : Controller

    {

        public ActionResult Index(string id)

        {

            return View();

        }

    }


}  

代码 Listing 2 部分,便是ASP.NET MVC C C,就是ControllerASP.NET 的命名规则就是NameController

请求 /Home/Index/3 这样的 URL ,则调用的是 HomeController.Index( 3 )

同理,倘若请求 /Test/About/3,自然调用的是TestController.About(3)

不过,当你请求 /Home/Index/3 时,不一定要对这个参数3“负责”。你可以完全无视参数。Listing 3 可以清晰的表示。对于非ControllerAction的部分,你可以选择“爱理不理”。

Listing 3 – ~/Controllers/HomeController.cs

using System.Web.Mvc;

namespace MVCTestDemo.Controllers

{

    [HandleError]

    public class HomeController : Controller

    {

        public ActionResult Index()

        {

            return View();

        }

    }


}  

根据我们注册的路由表,可以得知:在默认的情况下,当我们请求/Home路径的时候,视同调用了这样的函数(当参数为string数据类型时,参考代码Listing 2):

HomeController.Index(String.Empty)

当然,从字面上可以理解配置的参数(id)明显是一个整型。你完全可以选择使用int来作为数据类型。但是请注意,我们所配置的是一个默认为空字符串的id,如果你仅仅使用整型,将会抛出异常(无法将null转换为Int32),你完全可以使用可空类型(int?)。

转载于:https://www.cnblogs.com/sofire/articles/1603541.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(译)ASP.NET MVC Routing 概述 的相关文章

随机推荐

  • download excel file from datagrid for webpage

    lt summary gt Summary description for WebExcelUtil lt summary gt public sealed class WebExcelUtil public static void Gen
  • C#:装箱和拆箱

    C 允许 值类型 的任何值与 Object 类型的值相互转换 装箱是将值类型转换为引用类型 xff1b 拆箱是将引用类型转换为值类型 xff1b int i 61 100 object o 61 i 装箱 xff1a 将值类型i转化为了ob
  • 漂亮的登陆框

    转载于 https www cnblogs com aspphpvbs archive 2013 04 20 3033057 html
  • IOS设计模式浅析之抽象工厂模式(Abstract Factory)

    概述 在前面两章中 xff0c 分别介绍了简单工厂模式 和工厂方法模式 xff0c 我们知道简单工厂模式 的优点是去除了客户端与具体产品的依赖 xff0c 缺点是违反了 开放 关闭原则 xff1b 工厂方法模式 克服了简单工厂模式 的缺点
  • 软件工程小组第八次会议记录

    会议主题 xff1a 确定各个接口的命名及功能 与会时间 xff1a 6月17日 与会地点 xff1a 逸夫楼C202 与会成员 xff1a 尚卓燃 张世豪 傅宇豪 王昊钰 会议记录 xff1a 前端与后端讨论了接口的命名和功能 xff0c
  • Ant入门教程

    本内容包含了Ant的历史简要介绍 xff0c Ant的功能以及Ant框架的介绍 xff0c 并对下载安装使用Ant进行了示例介绍 xff0c 同时通过一个Java程序讲解了Ant的基本使用方法 1 Ant简介 xff1a 这里引用Ant帮助
  • Python 与系统管理

    作为一名系统管理员 xff0c 您可能碰到过各种各样的挑战和问题 管理用户 磁盘空间 进程 设备和备份 xff0c 可能让许多系统管理员绞尽脑汁 xff0c 从而变得心情郁闷 甚至精神错乱 Shell 脚本可以为此提供帮助 xff0c 但是
  • Nuget控制台 - 给你的快速添加缺少的包

    利用命令行安装包 转载于 https www cnblogs com davidgu p 3250663 html
  • Swift语言精要 - Operator(运算符重载)

    运算符重载 Swift的这一语言特性或许应该启发于C 43 43 class Vector2D var x Float 61 0 0 var y Float 61 0 0 init x Float y Float self x 61 x s
  • 关于研究性和工程性

    自己将要往哪个方向发展呢 xff1f 最近一段时间很认真的考虑了一下周围的人 xff0c 有做工程的 xff0c 有做研究的 xff0c 还有做商务的 做工程实际具体 xff0c 相对简单些 xff0c 但是可能薪水也相对低一些 xff1b
  • C#日写点滴(2)

    CTS Common Type System 公共类型系统 C 认可的基本预定义类型并没有内置于C 语言中 xff0c 而是内置于 NET Framework中 例如 xff0c 在C 中声明一个int类型的数据时 xff0c 声明实际上是
  • SQL-关联查询【转】

    T A A表 T B B标 xff0c id为表与表相关联的字段 96 创建相关表结构 span class hljs keyword CREATE span class hljs keyword TABLE Table B span cl
  • char, varchar, nchar, nvarchar (Transact-SQL)

    char 和 varchar Transact SQL 长度固定或可变的字符串数据类型 char n 固定长度 xff0c 非 Unicode 字符串数据 n 用于定义字符串长度 xff0c 并且它必须为 1 到 8 000 之间的值 存储
  • .net中类(class)与结构(struct)的不同

    Class可以被实例化 属于引用类 型 是分配在内存的堆上的 类是引用传递的 Struct属于值类型 是分配在内存的栈上的 结构体是复制传递的 Int32 Boolean等都属于结构体 转载于 https www cnblogs com b
  • Intro to asp.net MVC 简单的小程序(2)

    我们做的很简单 xff0c 就是一个电影的表单 xff0c 显示还有创建 强大的封装真的很好用 xff0c 当我们新建的视图的时候 xff0c 强类型下面都有封装好的 Create List Details 很多 xff0c 我们只要选择一
  • 利用网站上传漏洞使用一句话木马控制服务器

    一句话木马 常用于php asp aspx php lt php echo shell exec GET 39 cmd 39 gt asp lt execute request 34 value 34 gt aspx lt 64 Page
  • 用MotoMidMan给L7批量安装java程序

    在给手机装完驱动后 可以通过MotoMidMan给手机内存安装java程序 需要资源 数据线 MotoMidMan java程序 由一个 jar文件与一个 jad文件组成 操作步骤 1 下载完的是个压缩包 扩展名为 rar 解压完的文件清单
  • 28. Implement strStr()

    public class Solution public int strStr String haystack String needle int next 61 new int needle length generateNextArra
  • Oracle数据库删除了数据如何恢复

    再操作数据库时 xff0c 有时候误删了数据或者更新数据时忘记设置更新条件 xff0c 要是这时候没有提交事务 xff0c 还可以执行回滚操作 要是这时候不小心提交了 xff0c 数据也是可以恢复的 我们只需要执行下面这句sql selec
  • (译)ASP.NET MVC Routing 概述

    ASP NET MVC Routing 概述 在本篇教程中 xff0c 你将会了解到 ASP NET MVC 中一个重要的组件 这个组件叫做 ASP NET Routing xff0c 它负责将客户端请求的路径映射到特定的一个类 Contr