路由系统是请求消息进入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. css3 定义选择器

    引言:CSS样式规则有两个主要部分.选择器决定将格式化应用到哪些元素.声明则定义要应用的格式化. 构造选择器 选择器可以定义五个不同的标准来选择要进行格式化的元素. 元素的类型或者名称.如下所示. h ...

  2. JIRA数据库切换(HSQL Database到MySQL)

    没试过的版本,但是看着靠谱: 注:如果你之前配置过hsql版本,这次修改mysql数据操作会导致配置数据丢失,所以请注意备份 一. 创建名为jiradb的mysql数据,编码格式为utf-8 二.修改 ...

  3. C头文件和源文件的连

    (http://blog.163.com/yui_program/blog/static/18415541520115177852896/) 一.源文件如何根据#include来关联头文件 1,系统自 ...

  4. VPN各种常见状态码及修复方法

    1.633错误 :由于Windows系统本身的问题,在PPTP协议连接多次并断开之后,后导致一直出现633错误.参见微软的官方解决方案:http://support.microsoft.com/kb/ ...

  5. 移动端前端框架UI库(Frozen UI、WeUI、SUI Mobile)

    Frozen UI 自述:简单易用,轻量快捷,为移动端服务的前端框架. 主页:http://frozenui.github.io/ 开发团队:QQVIP FD Team Github:https:// ...

  6. SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)

    前段时间工作很忙,好久没更新博客了,趁国庆休假期间,整理了两个之前积累很实用的企业集成组件,并在真正的大型项目中经受住了考验:.Net版SAP RFC适配器组件和SharePoint 2013修改AD ...

  7. sql server版本

    10.00.1600 :SQL 2008 10.50.1600:SQL 2008 R2 10.50.2500:SQL 2008 R2 SP1

  8. visual studio 2012 has stopped working

    I had similar problem which was resolved by taking two steps : 1A. DELETE THE REGISTRY KEY : 32-bit ...

  9. MySQL单机load过高问题讨论

    有一个朋友问我: "hi,我想问下你们遇到单机load过高的情况 采取什么紧急措施啊?" 我问他是不是mysql db server? 他说是. 我给他如下建议: 1 先看下是不是 ...

  10. DDD:群里关于验证的结论

    @汤雪华 验证是为了让数据符合要求.各个层的验证是为了确保传递给各个层的数据符合当前层所需要的数据的要求. @小学僧 db model的验证主要是为了保证数据完整. domain model的验证主要 ...