路由系统是请求消息进入ASP.NET Web API消息处理管道的第一道屏障,其根本目的是利用注册的路由表(RouteTable)对请求的URI进行解析以确定目标HttpController和Action的名称,以及与目标Action方法某个参数进行绑定的路由变量。

ASP.NET Web API框架是一个独立于传输层的抽象消息处理管道,其本身并不具有传输协议的侦听、接收和响应能力。
WebHost和SelfHost这两种典型的寄宿模式采用两种截然不同的机制实现了ASP.NET Web API路由系统的适配。

ASP.NET Web API 包含路由系统在内的核心框架是一个独立于寄宿环境的消息处理管道,这是为什么它能支持多种不同寄宿模式的根源所在。服务寄宿的目的在于提供一个运行环境以监听并接收来自外界的请求,并将请求适当加工后递交给这个抽象的消息处理管道进行处理,最后将管道处理后生成的响应利用网络传输返回给客户端。对于WebHost来说,真正的路由功能是由ASP.NET自身的路由系统来完成的。ASP.NET MVC的路由完全是由ASP.NET路由系统来完成的,但后者并非专门为MVC而设计,其实它最初是为了帮助Web Forms应用实现“请求地址与物理文件的分离”而设计的。

一个简单的例子来注册ASP.NET路由映射

这个Route的注册包括了:映射URI各段(Segment)的默认值,值的约束以及其它一些附加数据。

 using System;
using System.Web;
using System.Web.Routing; namespace WebHost
{
public class Global : HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
// 设置路由映射URI各段的默认值
var defaults = new RouteValueDictionary
{
{"areacode", ""}
}; // 设置值的约束
var constrains = new RouteValueDictionary
{
{"areacode", @"0\d{2,3}"},
{"days", @"[1-3]"}
}; // 设置附加数据
var dataTokens = new RouteValueDictionary
{
{"defaultCity", "BeiJing"},
{"defaultDays", ""}
}; // 在路由表中注册路由(Friendly URL与物理文件分离)
RouteTable.Routes.MapPageRoute("default", "{areacode}/{days}", "~/weather.aspx", false, defaults, constrains, dataTokens);
}
}
}

写一个WebForm页面来呈现上述的各种路由数据

 using System;
using System.Web.UI; namespace WebHost
{
public partial class Weather : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (RouteData.Route != null)
{
Response.Write(RouteData.Route.GetType().FullName);
Response.Write("<br/>");
}
if (RouteData.RouteHandler != null)
{
Response.Write(RouteData.RouteHandler.GetType().FullName);
Response.Write("<br/>");
}
Response.Write("<b>RouteData Values:</b></br>");
foreach (var variable in RouteData.Values)
{
Response.Write($"<li>{variable.Key}={variable.Value}</li>");
}
Response.Write("<b>RouteData DataTokens:</b>");
foreach (var variable in RouteData.DataTokens)
{
Response.Write($"<li>{variable.Key} = {variable.Value}</li>");
}
}
}
}
}

运行结果

ASP.NET Web API 路由的更多相关文章

  1. ASP.NET Web API 路由对象介绍

    ASP.NET Web API 路由对象介绍 前言 在ASP.NET.ASP.NET MVC和ASP.NET Web API这些框架中都会发现有路由的身影,它们的原理都差不多,只不过在不同的环境下作了 ...

  2. ASP.NET Web API路由系统:路由系统的几个核心类型

    虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分(定义在程序集System.Web.Http.dll中)已经移除 ...

  3. ASP.NET Web API路由系统:Web Host下的URL路由

    ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所以它可以采用不同的寄宿方式运行于 ...

  4. Asp.Net Web APi 路由的特点

    在ASP.NET Web API中,路由是基于HTTP协议 GET请求路由到以GET开头的控制器方法,POST请求路由到以POST开头的控制器方法中,GET方法和GetProducts,都能与GET请 ...

  5. ASP.NET Web API 框架研究 ASP.NET Web API 路由

    ASP.NET Web API 核心框架是一个独立的.抽象的消息处理管道,ASP.NET Web API有自己独立的路由系统,是消息处理管道的组成部分,其与ASP.NET路由系统有类似的设计,都能找到 ...

  6. 剖析Asp.Net Web API路由系统---WebHost部署方式

    上一篇我们剖析了Asp.Net路由系统,今天我们再来简单剖析一下Asp.Net Web API以WebHost方式部署时,Asp.Net Web API的路由系统内部是怎样实现的.还是以一个简单实例开 ...

  7. 【转载】Asp .Net Web Api路由路径问题

    原文章地址:https://www.cnblogs.com/devtester/p/8897302.html MVC也好,WebAPI也好,据我所知,有部分人是因为复杂的路由,而不想去学的.曾经见过一 ...

  8. ASP.NET Web API路由解析

    前言 本篇文章比较长,仔细思考阅读下来大约需要15分钟,涉及类图有可能在手机显示不完整,可以切换电脑版阅读. 做.Net有好几年时间了从ASP.NET WebForm到ASP.NET MVC再到ASP ...

  9. ASP.NET Web API路由规则(二) 【转】

    http://www.cnblogs.com/liulun/archive/2012/06/20/2556556.html 默认的规则 在ASP.NET MVC4中 global.asax.cs代码中 ...

随机推荐

  1. 给MySQL官方提交的bug report备忘

    1.  Bug #72215 When LOCK_plugin conflicts very much, one uninstall-audit-plugin operation crash  htt ...

  2. android 模拟器

    参考:http://www.syscs.com/node/504 --skin WVGA800 - -no-boot-anim -wipe-: the dpi for the device you a ...

  3. 给animator动态添加事件

    using UnityEngine; using System.Collections; public class setAnimationEvent : MonoBehaviour { public ...

  4. [转]阎宏博士的JAVA与模式

    阎宏,1964年出生于天津市.1987年毕业于中国科技大学近代物理系,1990年于中科院理论物理所获硕士学位,1992年获博士学位,翌年赴日本京都大学进行博士后研究工作. 作者曾于美国花旗银行(Cit ...

  5. EF6+MYSQL之初体验

    初次使用EF6+MYSQL 这次的项目时间可拉得够长的,定制开发就是这样.客户真正用上了才能基本上不再改了.起先项目是php实现的,改造成桌面程序.用.net winform开发,像这种小项目肯定要用 ...

  6. java框架篇---spring IOC依赖注入

    spring依赖注入的方式有4种 构造方法注入 属性注入 工厂注入 注解注入 下面通过一个实例统一讲解: User.java package com.bjsxt.model; public class ...

  7. VIM配置相关记录

    把一直使用中的vim配置做个GIT入库管理,也把之前积累在机器上的文档,做个汇总. https://github.com/wujuguang/kyvim 1. 安装完整版vim vi和vim的区别?在 ...

  8. 使用Service.Stack客户端编写redis pub sub的方法

    pub相对简单 client.PublishMessage("channel", "msg");   sub有2种方法 方法1 var subscription ...

  9. 二叉查找树(二)之 C++的实现

    概要 上一章介绍了"二叉查找树的相关理论知识,并通过C语言实现了二叉查找树".这一章给出二叉查找树的C++版本.这里不再对树的相关概念进行介绍,若遇到不明白的概念,可以在上一章查找 ...

  10. 【JVM学习笔记一】JVM内存分布

    Overview 学习JVM首先需要了解一下JVM管理的内存是如何分布的,在看了<深入理解Java虚拟机>和一些博文之后,我准备自己记录一下学习的过程. 下图是JVM中运行时数据区的大致示 ...