zoukankan      html  css  js  c++  java
  • 特性路由

    路由的目的:对http请求提取ControllerName和ActionName,从而映射到具体Action。
    特性路由:在设计时通过对Controller或Action标注映射到路由上,其实时根据Controller或Action上Attribute生成Route并添加到RouteTable

    特性路由注册

    特性名 注册方式 例子
    RouteAttribute 定义Action对应的路由 [Route("movies/{id}")]
    RoutePrefixAttribute 应用于Controller,定义前缀 RoutePrefix("movies/")
    RouteAreaAttribute 应用于Controller,定义于Area RouteArea("movies")

    注意定义模板的占位符指代Action的参数,ControllerAction以通过反射赋值,最终生成的Route加入到RouteTable

    路由约束

    路由的占位符约束,内联约束的写作形式。
    [Route("movies/{id:int}")]id必须为int类型。
    内部象关流程

    1. RouteCollectionAttributeRoutingExtensions的扩展方法完成特性路由注册
      public static void MapMvcAttributeRoutes(this RouteCollection routes,IInlineConstraintResolver constraintResolver)
    2. 根据字符选择约束类型IInlineConstraintResolver,实现接口类DefaultInlineConstraintResolver属性ConstraintMap为约束字典,ResoveConstraint(string inlineConstraint) 方法返回约束实体
    3. 约束继承接口 IRouteConstraint

    自定约束

    自定义特性路由

    1. 约束实现接口IRouteConstraint
    2. 注册如内联约束
    public static class RouteConfig 
    {
    	public static void RegisterRoutes( RouteCollection routes) 
    	{ 
    		DefaultInlineConstraintResolver constraintResolver = new DefaultInlineConstraintResolver(); 
    		constraintResolver. ConstraintMap. Add( "culture", typeof( CultureRouteConstraint)); 
    		routes. MapMvcAttributeRoutes( constraintResolver); 
    		//其他 操作 
    	} 
    }
    

    路由创建过程

    怎样根据特性生成路由的呢?

    1. 在运行routes.MapMvcAttributeRoutes( constraintResolver); 时,会通过DependencyResolver提取ControllerFactory
    2. 通过ControllerFactory得到所有的Controller
    3. 根据Controller得到ReflectedAsyncControllerDescriptor,在得到在ControllerAction上的Attribute
    4. 最后将得到的Route添加到RouteTable
  • 相关阅读:
    达梦数据库还原
    达梦数据库备份-Quartz定时任务备份
    达梦数据库备份-手动备份
    Hadoop集群分布式安装
    echarts实现group关系图案例
    U盘安装windows系统
    GC垃圾回收机制
    form表单提交方式实现浏览器导出Excel
    数据分析-信用卡反欺诈模型
    机器学习-SVM
  • 原文地址:https://www.cnblogs.com/LoveTomato/p/9609759.html
Copyright © 2011-2022 走看看