public IRoutingManager Add <T>(string routeName, string url) where T : IWebHandler
        {
            var fullName = typeof(T).FullName;
            var handler  = GlobalApplicationObject.Current.ApplicationContext.WebHandlerList.FirstOrDefault(p => p.FullName == fullName);

            if (handler == null)
            {
                Log.LogFormat(LoggerLevels.Error, "Handler不存在。 routeName:{0} url:{1} WebHandler:{2} by:{3}", routeName, url, fullName, StackHelper.GetCallingType().FullName);
            }
            else if (handler != null && !RouteWebHandlerInfoList.Any(p => p.routeName == routeName))
            {
                var routeWebHandlerInfo = new RouteWebHandlerInfo()
                {
                    routeName      = routeName,
                    routeUrl       = url,
                    WebHandlerInfo = handler
                };
                RouteWebHandlerInfoList.Add(routeWebHandlerInfo);
                Log.LogFormat(LoggerLevels.Info, "AddRoute routeName:{0} url:{1} WebHandler:{2} by:{3}", routeName, url, fullName, StackHelper.GetCallingType().FullName);
            }
            else
            {
                Log.LogFormat(LoggerLevels.Warn, "Route已存在。 routeName:{0} url:{1} WebHandler:{2} by:{3}", routeName, url, fullName, StackHelper.GetCallingType().FullName);
            }
            return(this);
        }
Beispiel #2
0
        public void ProcessRequest(HttpContext context)
        {
            if (RouteWebHandlerInfo.IsNotNull())
            {
                switch (HandlerType)
                {
                case WebHandlerTypes.JSONHandler:
                {
                    ProcessHander(context, RouteWebHandlerInfo.WebHandlerInfo);
                }
                break;

                case WebHandlerTypes.ResourceHandler:
                {
                    var res = new ResourceManager(context);
                    res.SendResourceContent();
                    break;
                }

                case WebHandlerTypes.WebAPIHandler:
                {
                    ProcessHander(context, RouteWebHandlerInfo.WebHandlerInfo);
                    break;
                }

                default:
                    break;
                }
                return;
            }


            ////程序集名称
            //var assemblyName = WebContext.RouteValues["assemblyName"].ToString();
            ////对应Name
            //var handlerName = WebContext.RouteValues["handlerName"].ToString();
            switch (HandlerType)
            {
            case WebHandlerTypes.JSONHandler:
                #region 处理JSON
            {
                var mainUrls = context.Request.Url.AbsolutePath.ToLower().Trim('/').Split('/');
                //程序集名称
                var assemblyName = mainUrls[1];
                //对应Name
                var handlerName = mainUrls[2];
                //根据程序集名称以及Name匹配Handler
                var jsonHandler = GlobalApplicationObject.Current.ApplicationContext.WebHandlerList
                                  .FirstOrDefault(p =>
                                                  p.WebHandlerType == WebHandlerTypes.JSONHandler &&
                                                  p.AssemblyName.Equals(assemblyName, StringComparison.CurrentCultureIgnoreCase) &&
                                                  p.Name.Equals(handlerName, StringComparison.CurrentCultureIgnoreCase));
                if (jsonHandler != null)
                {
                    ProcessHander(context, jsonHandler);
                }
            }
            break;

                #endregion
            case WebHandlerTypes.ResourceHandler:
            {
                var res = new ResourceManager(context);
                res.SendResourceContent();
            }
            break;

            case WebHandlerTypes.WebAPIHandler:
            {
                var mainUrls = context.Request.Url.AbsolutePath.ToLower().Trim('/');
                //根据程序集名称以及Name匹配Handler
                var handlers = GlobalApplicationObject.Current.ApplicationContext.WebHandlerList
                               .Where(p =>
                                      p.WebHandlerType == WebHandlerTypes.WebAPIHandler &&
                                      mainUrls.StartsWith("api/" + p.WebAPIName));
                var count = handlers.Count();
                if (count == 1)
                {
                    ProcessHander(context, handlers.First());
                }
                else if (count > 1)
                {
                    mainUrls = mainUrls.RightOf("api/");
                    var urlParams = mainUrls.Split('/');
                    //TODO:应该改为按照位置0开始的相邻的字符串的相似度比较
                    //比较相似度,取相似度最高的
                    var webAPIHandler = handlers.Select(p => new { webApi = p, SimilarityCount = p.WebAPIName.Split('/').Intersect(urlParams).Count() })
                                        .OrderByDescending(p => p.SimilarityCount)
                                        .First().webApi;
                    ProcessHander(context, webAPIHandler);
                }

                break;
            }

            default:
                break;
            }
        }