• 特性路由


    路由的目的:对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
  • 相关阅读:
    Centos6.5安装Oracle11.2.0.4 RAC(完整版)
    VMware搭建Oracle 11g RAC测试环境 For Linux
    Linux CentOS命令行界面字体重复问题解决记录
    SSH公钥认证(码云)
    Git 上传本地仓库到码云
    Git 相关工具及教程地址
    jdk8 新特性stream().map()
    PowerDesigner 使用记录
    IDEA 中.properties文件中文自动转Unicode编码及乱码问题
    idea在Maven Projects中显示灰色的解决办法
  • 原文地址:https://www.cnblogs.com/LoveTomato/p/9609759.html
Copyright © 2020-2023  润新知