Esempio n. 1
0
        /// <summary>
        /// 在冲突检测表中添加一条记录,并检测与现有规则是否冲突。
        /// </summary>
        /// <param name="rule">要添加的规则</param>
        /// <param name="conflictRule">与之相冲突的规则,如果有的话</param>
        /// <returns>是否成功</returns>
        public bool AddRuleAndCheckConflict(SimpleRouteRule rule, out SimpleRouteRule conflictRule)
        {
            var virtualPath = rule.GetVirtualPathDescriptor();
            var routeValues = rule.GetRouteValuesDescriptor();

            lock ( _sync )
            {
                if (virtualPathList.TryGetValue(virtualPath, out conflictRule))
                {
                    return(false);
                }

                if (routeValuesList.TryGetValue(routeValues, out conflictRule))
                {
                    return(false);
                }


                conflictRule = null;
                virtualPathList.Add(virtualPath, rule);
                routeValuesList.Add(routeValues, rule);

                return(true);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 获取可能与指定路由规则冲突的路由规则
        /// </summary>
        /// <param name="rule">要检查冲突的路由规则</param>
        /// <returns>可能与之冲突的路由规则</returns>
        public SimpleRouteRule GetConflictRule(SimpleRouteRule rule)
        {
            var virtualPath = rule.GetVirtualPathDescriptor();
            var routeValues = rule.GetRouteValuesDescriptor();

            return(GetConflict(virtualPath, routeValues));
        }
Esempio n. 3
0
        /// <summary>
        /// 尝试冲突检测表中添加一条记录,并检测与现有规则是否冲突,若有冲突则无法添加成功
        /// </summary>
        /// <param name="rule">要添加的规则</param>
        /// <param name="conflictRule">与之相冲突的规则,如果有的话</param>
        /// <returns>是否添加成功</returns>
        public bool TryAddRule(SimpleRouteRule rule, out SimpleRouteRule conflictRule)
        {
            var virtualPath = rule.GetVirtualPathDescriptor();
            var routeValues = rule.GetRouteValuesDescriptor();

            lock ( _sync )
            {
                conflictRule = GetConflict(virtualPath, routeValues);
                if (conflictRule != null)
                {
                    return(false);
                }


                virtualPathList.Add(virtualPath, rule);
                routeValuesList.Add(routeValues, rule);
                return(true);
            }
        }
Esempio n. 4
0
    /// <summary>
    /// 在冲突检测表中添加一条记录,并检测与现有规则是否冲突。
    /// </summary>
    /// <param name="rule">要添加的规则</param>
    /// <param name="conflictRule">与之相冲突的规则,如果有的话</param>
    /// <returns>是否成功</returns>
    public bool AddRuleAndCheckConflict( SimpleRouteRule rule, out SimpleRouteRule conflictRule )
    {

      var virtualPath = rule.GetVirtualPathDescriptor();
      var routeValues = rule.GetRouteValuesDescriptor();

      lock ( _sync )
      {

        if ( virtualPathList.TryGetValue( virtualPath, out conflictRule ) )
          return false;

        if ( routeValuesList.TryGetValue( routeValues, out conflictRule ) )
          return false;


        conflictRule = null;
        virtualPathList.Add( virtualPath, rule );
        routeValuesList.Add( routeValues, rule );

        return true;
      }
    }