/// <summary>
        ///
        /// </summary>
        /// <param name="context"></param>
        /// <param name="next"></param>
        /// <returns></returns>
        public async Task Invoke(IDictionary <string, object> environment)
        {
            var requestHeaders = environment[OwinConstants.RequestHeaders] as IDictionary <string, string[]>;

            var contractid = Convert.ToInt32(requestHeaders[Constants.Headers.ContractId].First());

            var controllerDesc = controllerProvider.GetControllerDescriptor(contractid);

            if (controllerDesc == null)
            {
                this.logger.LogError($"找不到指定的controller:{contractid}");
                environment[OwinConstants.ResponseStatusCode] = (int)HttpStatusCode.NotFound;
                return;
            }
            //检查是否定义了匿名特性
            environment.TryGetValue(OwinConstants.Security.User, out object user);
            if (controllerDesc.ControllerType.IsDefined(typeof(AllowAnonymousAttribute)) == false && user == null)
            {
                environment[OwinConstants.ResponseStatusCode] = AuthorizationStatusCodes.Status1001AuthorizationFail;
                return;
            }

            //特殊检查
            if (controllerDesc.ControllerType.IsDefined(typeof(AuthorizeAttribute)) == true)
            {
                //TODO:特殊检查
            }

            await next(environment);
        }
Exemple #2
0
        public async Task Invoke(IDictionary <string, object> environment)
        {
            var requestHeaders = environment[OwinConstants.RequestHeaders] as IDictionary <string, string[]>;
            var contractid     = Convert.ToInt32(requestHeaders[Constants.Headers.ContractId].First());

            var context = new OwinContext(environment);

            var controllerDesc = controllerProvider.GetControllerDescriptor(contractid);

            if (controllerDesc == null)
            {
                this.logger.LogError($"找不到指定的controller:{contractid}");
                context.Response.StatusCode = (int)HttpStatusCode.NotFound;
                return;
            }

            var controller = ActivatorUtilities.CreateInstance(this._serviceprovider, controllerDesc.ControllerType) as IMessageController;

            controller.Context = context;
            try
            {
                if (controllerDesc.HandlerBeforeMethodInfo != null && ExecuteBeforeHandlerMethod(controllerDesc.HandlerBeforeMethodInfo, controller, context) == false)
                {
                    return;
                }

                await ExecuteHandlerMethod(controllerDesc.HandlerMethodInfo, controller, context);

                if (controllerDesc.HandlerAfterMethodInfo != null)
                {
                    controllerDesc.HandlerAfterMethodInfo.Invoke(controller, new object[] { });
                }
            }
            finally
            {
                controller.Dispose();
            }
        }