Exemple #1
0
 /// <summary>
 /// 创建一个新的路由条目
 /// </summary>
 /// <param name="uri">uri信息</param>
 /// <param name="action">路由行为</param>
 internal Route(Uri uri, RouteAction action)
 {
     this.uri    = uri;
     this.action = action;
     options     = new RouteOptions();
     options.OnCompiledChange += ClearCompile;
 }
Exemple #2
0
 /// <summary>
 /// 合并默认值
 /// </summary>
 /// <param name="options">外部路由配置</param>
 private void MergeDefaults(RouteOptions options)
 {
     if (defaults == null)
     {
         return;
     }
     foreach (var kv in defaults)
     {
         options.Defaults(kv.Key, kv.Value, false);
     }
 }
Exemple #3
0
 /// <summary>
 /// 合并where
 /// </summary>
 /// <param name="options">外部路由配置</param>
 private void MergeWhere(RouteOptions options)
 {
     if (wheres == null)
     {
         return;
     }
     foreach (var kv in wheres)
     {
         options.Where(kv.Key, kv.Value, false);
     }
 }
Exemple #4
0
 /// <summary>
 /// 合并错误时的调度
 /// </summary>
 /// <param name="options"></param>
 protected void MergeOnError(RouteOptions options)
 {
     if (onError == null)
     {
         return;
     }
     IFilter <IRequest, Exception>[] filters = onError.FilterList;
     for (int i = 0; i < filters.Length; i++)
     {
         options.OnError(filters[i]);
     }
 }
Exemple #5
0
 /// <summary>
 /// 合并中间件
 /// </summary>
 /// <param name="options"></param>
 protected void MergeMiddleware(RouteOptions options)
 {
     if (middleware == null)
     {
         return;
     }
     IFilter <IRequest, IResponse>[] filters = middleware.FilterList;
     for (int i = 0; i < filters.Length; i++)
     {
         options.Middleware(filters[i]);
     }
 }
Exemple #6
0
        /// <summary>
        /// 将当前路由配置中的信息合并到给定的路由配置中
        /// </summary>
        /// <param name="options"></param>
        /// <returns></returns>
        public RouteOptions Merge(RouteOptions options)
        {
            //合并的过程是一个平级的过程,所以遵循以下原则:
            //当key不允许重复时,如果已经有值则不进行赋值
            //当key是允许重复时,所有的合并操作追加在原始key list之后

            MergeMiddleware(options);
            MergeOnError(options);
            MergeWhere(options);
            MergeDefaults(options);
            return(this);
        }
Exemple #7
0
        /// <summary>
        /// 合并错误时的调度
        /// </summary>
        /// <param name="options">外部路由配置</param>
        private void MergeOnError(RouteOptions options)
        {
            if (onError == null)
            {
                return;
            }
            var filters = onError.FilterList;

            for (var i = 0; i < filters.Length; i++)
            {
                options.OnError(filters[i]);
            }
        }
Exemple #8
0
        /// <summary>
        /// 合并中间件
        /// </summary>
        /// <param name="options">外部路由配置</param>
        private void MergeMiddleware(RouteOptions options)
        {
            if (middleware == null)
            {
                return;
            }
            var filters = middleware.FilterList;

            for (var i = 0; i < filters.Length; i++)
            {
                options.Middleware(filters[i]);
            }
        }
Exemple #9
0
 /// <summary>
 /// 路由组
 /// </summary>
 public RouteGroup()
 {
     options = new RouteOptions();
     routes  = new List <IRoute>();
 }
Exemple #10
0
 /// <summary>
 /// 创建一个新的路由条目
 /// </summary>
 /// <param name="url"></param>
 /// <param name="action"></param>
 public Route(Uri uri, RouteAction action)
 {
     this.uri    = uri;
     this.action = action;
     options     = new RouteOptions();
 }