/// <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); }
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(); } }