ASP.NET Web API 路由
2015-08-04 17:32
483 查看
路由系统是请求消息进入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)的默认值,值的约束以及其它一些附加数据。
写一个WebForm页面来呈现上述的各种路由数据
运行结果
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", "010"} }; // 设置值的约束 var constrains = new RouteValueDictionary { {"areacode", @"0\d{2,3}"}, {"days", @"[1-3]"} }; // 设置附加数据 var dataTokens = new RouteValueDictionary { {"defaultCity", "BeiJing"}, {"defaultDays", "2"} }; // 在路由表中注册路由(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)MVC4怎么设置@Html.TextBoxFor样式
- ASP.NET每一个页面首次访问超级慢
- asp.net 发出xml请求和响应xml
- asp.net 中Ajax发送XML对象到服务器和服务器获取XML对象
- HighCharts图表控件在ASP.NET WebForm中的使用总结(全)
- casperjs 的API-casper模块
- 详解ASP.NET七大身份验证方式以及解决方案
- C# 使用ffmpeg.exe进行音频转换完整demo-asp.net转换代码
- 列举ASP.NET 页面之间传递值的几种方式?
- [CasperJS] 安装
- ASP.NET MVC在服务端把异步上传的图片裁剪成不同尺寸分别保存,并设置上传目录的尺寸限制
- Aspose相关操作代码
- 直接在线预览Word、Excel、TXT文件之ASP.NET
- ASP.NET - 上传图片方法(单张)
- asp:Repeater数据排序
- ABP(现代ASP.NET样板开发框架)系列之18、ABP应用层——权限验证
- ASP.NET - 跳转页面
- 用Jasper report实现横向分栏报表
- 数独解算器(ASP.NET 2.0)
- 详解ASP.NET七大身份验证方式以及解决方案