zoukankan      html  css  js  c++  java
  • ASP.NET Web API 路由

    路由系统是请求消息进入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)的默认值,值的约束以及其它一些附加数据。

     1 using System;
     2 using System.Web;
     3 using System.Web.Routing;
     4 
     5 namespace WebHost
     6 {
     7     public class Global : HttpApplication
     8     {
     9         protected void Application_Start(object sender, EventArgs e)
    10         {
    11             // 设置路由映射URI各段的默认值
    12             var defaults = new RouteValueDictionary
    13             {
    14                 {"areacode", "010"}
    15             };
    16 
    17             // 设置值的约束
    18             var constrains = new RouteValueDictionary
    19             {
    20                 {"areacode", @"0d{2,3}"},
    21                 {"days", @"[1-3]"}
    22             };
    23             
    24             // 设置附加数据
    25             var dataTokens = new RouteValueDictionary
    26             {
    27                 {"defaultCity", "BeiJing"},
    28                 {"defaultDays", "2"}
    29             };
    30             
    31             // 在路由表中注册路由(Friendly URL与物理文件分离)
    32             RouteTable.Routes.MapPageRoute("default", "{areacode}/{days}", "~/weather.aspx", false, defaults, constrains, dataTokens);
    33         }
    34     }
    35 }

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

     1 using System;
     2 using System.Web.UI;
     3 
     4 namespace WebHost
     5 {
     6     public partial class Weather : Page
     7     {
     8         protected void Page_Load(object sender, EventArgs e)
     9         {
    10             if (!IsPostBack)
    11             {
    12                 if (RouteData.Route != null)
    13                 {
    14                     Response.Write(RouteData.Route.GetType().FullName);
    15                     Response.Write("<br/>");
    16                 }
    17                 if (RouteData.RouteHandler != null)
    18                 {
    19                     Response.Write(RouteData.RouteHandler.GetType().FullName);
    20                     Response.Write("<br/>");
    21                 }
    22                 Response.Write("<b>RouteData Values:</b></br>");
    23                 foreach (var variable in RouteData.Values)
    24                 {
    25                     Response.Write($"<li>{variable.Key}={variable.Value}</li>");
    26                 }
    27                 Response.Write("<b>RouteData DataTokens:</b>");
    28                 foreach (var variable in RouteData.DataTokens)
    29                 {
    30                     Response.Write($"<li>{variable.Key} = {variable.Value}</li>");
    31                 }
    32             }
    33         }
    34     }
    35 }

    运行结果

  • 相关阅读:
    Sublime Text shift+ctrl妙用(转载)
    编写一致的符合习惯的javascript
    Vue 部署单页应用,刷新页面 404/502 报错
    http 缓存策略浅析
    Vue 项目优化,持续更新...
    web安全之——XSS、CSRF
    javascript 易错知识点合集
    深入理解 js this 绑定机制
    javascript 模块依赖管理的本质
    VUE 项目刷新路由指向index.html
  • 原文地址:https://www.cnblogs.com/frankyou/p/4702631.html
Copyright © 2011-2022 走看看