| 
						
						
						
					 | 
					@ -1,8 +1,6 @@ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					using Apewer.Network; | 
					 | 
					 | 
					using Apewer.Network; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					using Apewer.Source; | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					using System; | 
					 | 
					 | 
					using System; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					using System.Collections.Generic; | 
					 | 
					 | 
					using System.Collections.Generic; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					using System.Data; | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					using System.Net; | 
					 | 
					 | 
					using System.Net; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					using System.Reflection; | 
					 | 
					 | 
					using System.Reflection; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					using static Apewer.Web.ApiUtility; | 
					 | 
					 | 
					using static Apewer.Web.ApiUtility; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -47,8 +45,32 @@ namespace Apewer.Web | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                response.Function = request.Function; | 
					 | 
					 | 
					                response.Function = request.Function; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                _context.Response = response; | 
					 | 
					 | 
					                _context.Response = response; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                // 调用 API。
 | 
					 | 
					 | 
					                // OPTIONS
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                Invoke(); | 
					 | 
					 | 
					                if (_context.Request.Method == HttpMethod.OPTIONS) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                    if (!_context.Options.AllowOptions) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                    { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                        _context.Response.Model = new ApiTextModel(""); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                        return; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                // 中间件
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                var middlewares = _context.Invoker.Middlewares; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                if (middlewares.Length > 0) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                    // 设置队列和回调。
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                    _mw_queue = new Queue<Type>(middlewares); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                    _context.SetMiddlewareCallback(MiddlewareNext); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                    // 执行。
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                    MiddlewareNext(_context); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                else | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                    // 无中间件。
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                    Route(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            } | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            catch (Exception ex) | 
					 | 
					 | 
					            catch (Exception ex) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            { | 
					 | 
					 | 
					            { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -131,23 +153,6 @@ namespace Apewer.Web | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            return null; | 
					 | 
					 | 
					            return null; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        } | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        // 寻找入口。
 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        void Invoke() | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        { | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            // OPTIONS
 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            if (_context.Request.Method == HttpMethod.OPTIONS) | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            { | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                if (!_context.Options.AllowOptions) | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                { | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    _context.Response.Model = new ApiTextModel(""); | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    return; | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                } | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            // 中间件
 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            InvokeMiddwares(); | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        #endregion
 | 
					 | 
					 | 
					        #endregion
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        #region common
 | 
					 | 
					 | 
					        #region common
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -278,24 +283,6 @@ namespace Apewer.Web | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            middleware.Invoke(context); | 
					 | 
					 | 
					            middleware.Invoke(context); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        } | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        // 调用中间件。
 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        void InvokeMiddwares() | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        { | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            var types = _context.Invoker.Middlewares; | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            if (types.Length < 1) | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            { | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                Route(); | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                return; | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            // 设置队列和回调。
 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            _mw_queue = new Queue<Type>(types); | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            _context.SetMiddlewareCallback(MiddlewareNext); | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            // 执行。
 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            MiddlewareNext(_context); | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        // 执行路由。
 | 
					 | 
					 | 
					        // 执行路由。
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        void Route() | 
					 | 
					 | 
					        void Route() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        { | 
					 | 
					 | 
					        { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -308,7 +295,7 @@ namespace Apewer.Web | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                if (action != null) | 
					 | 
					 | 
					                if (action != null) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                { | 
					 | 
					 | 
					                { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    _context.ApiAction = action; | 
					 | 
					 | 
					                    _context.ApiAction = action; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                    Invoke(action); | 
					 | 
					 | 
					                    InvokeAction(action); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					                    return; | 
					 | 
					 | 
					                    return; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                } | 
					 | 
					 | 
					                } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            } | 
					 | 
					 | 
					            } | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -318,7 +305,7 @@ namespace Apewer.Web | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            { | 
					 | 
					 | 
					            { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                var appName = _context.Request.Application; | 
					 | 
					 | 
					                var appName = _context.Request.Application; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                var application = _context.Entries.GetApplication(appName); | 
					 | 
					 | 
					                var application = _context.Entries.GetApplication(appName); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                Invoke(application); | 
					 | 
					 | 
					                InvokeApplication(application); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					                return; | 
					 | 
					 | 
					                return; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            } | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -332,7 +319,7 @@ namespace Apewer.Web | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        #region route
 | 
					 | 
					 | 
					        #region route
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        // 执行 Action。
 | 
					 | 
					 | 
					        // 执行 Action。
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        void Invoke(ApiAction action) | 
					 | 
					 | 
					        void InvokeAction(ApiAction action) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        { | 
					 | 
					 | 
					        { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            var controller = null as ApiController; | 
					 | 
					 | 
					            var controller = null as ApiController; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            try | 
					 | 
					 | 
					            try | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -375,7 +362,7 @@ namespace Apewer.Web | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        #region reflection
 | 
					 | 
					 | 
					        #region reflection
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        // 创建控制器。
 | 
					 | 
					 | 
					        // 创建控制器。
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        void Invoke(ApiApplication application) | 
					 | 
					 | 
					        void InvokeApplication(ApiApplication application) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        { | 
					 | 
					 | 
					        { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            var options = _context.Options; | 
					 | 
					 | 
					            var options = _context.Options; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            var entries = _context.Entries; | 
					 | 
					 | 
					            var entries = _context.Entries; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -401,7 +388,7 @@ namespace Apewer.Web | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    try | 
					 | 
					 | 
					                    try | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    { | 
					 | 
					 | 
					                    { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                        controller = CreateController(@default, _context); | 
					 | 
					 | 
					                        controller = CreateController(@default, _context); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                        Invoke(controller, application, null, options, request, response); | 
					 | 
					 | 
					                        InvokeFunction(controller, application, null, options, request, response); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					                    } | 
					 | 
					 | 
					                    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    catch (Exception ex) | 
					 | 
					 | 
					                    catch (Exception ex) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    { | 
					 | 
					 | 
					                    { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -421,7 +408,7 @@ namespace Apewer.Web | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                try | 
					 | 
					 | 
					                try | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                { | 
					 | 
					 | 
					                { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    controller = CreateController(application.Type, _context); | 
					 | 
					 | 
					                    controller = CreateController(application.Type, _context); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                    Invoke(controller, application, function, options, request, response); | 
					 | 
					 | 
					                    InvokeFunction(controller, application, function, options, request, response); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					                } | 
					 | 
					 | 
					                } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                catch (Exception ex) | 
					 | 
					 | 
					                catch (Exception ex) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                { | 
					 | 
					 | 
					                { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -435,7 +422,7 @@ namespace Apewer.Web | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        } | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        // 调用 Function。
 | 
					 | 
					 | 
					        // 调用 Function。
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        void Invoke(ApiController controller, ApiApplication application, ApiFunction function, ApiOptions options, ApiRequest request, ApiResponse response) | 
					 | 
					 | 
					        void InvokeFunction(ApiController controller, ApiApplication application, ApiFunction function, ApiOptions options, ApiRequest request, ApiResponse response) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        { | 
					 | 
					 | 
					        { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            try | 
					 | 
					 | 
					            try | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            { | 
					 | 
					 | 
					            { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					
  |