private void SourceData( BindingInfo bindingInfo, Type parameterType, IWebHookRequestMetadata requestMetadata) { if (requestMetadata == null) { return; } if (requestMetadata.UseHttpContextModelBinder && _allowedTypes.Any(allowedType => parameterType.IsAssignableFrom(allowedType))) { bindingInfo.BinderModelName = WebHookErrorKeys.MessageKey; bindingInfo.BinderType = typeof(WebHookHttpContextModelBinder); bindingInfo.BindingSource = BindingSource.Custom; return; } if (requestMetadata.BodyType == WebHookBodyType.Form) { bindingInfo.BinderModelName = WebHookErrorKeys.MessageKey; bindingInfo.BindingSource = BindingSource.Form; return; } bindingInfo.BinderModelName = WebHookErrorKeys.MessageKey; bindingInfo.BindingSource = BindingSource.Body; }
/// <summary> /// Instantiates a new <see cref="WebHookVerifyMethodFilter"/> instance. /// </summary> /// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param> /// <param name="requestMetadata">The collection of <see cref="IWebHookMetadata"/> services.</param> public WebHookVerifyBodyTypeFilter(ILoggerFactory loggerFactory, IWebHookRequestMetadata requestMetadata) { if (loggerFactory == null) { throw new ArgumentNullException(nameof(loggerFactory)); } if (requestMetadata == null) { throw new ArgumentNullException(nameof(requestMetadata)); } _logger = loggerFactory.CreateLogger <WebHookVerifyBodyTypeFilter>(); _requestMetadata = requestMetadata; }
private void SourceData(BindingInfo bindingInfo, IWebHookRequestMetadata requestMetadata) { if (requestMetadata == null) { return; } if (requestMetadata.BodyType == WebHookBodyType.Form) { bindingInfo.BinderModelName = WebHookErrorKeys.MessageKey; bindingInfo.BindingSource = BindingSource.Form; return; } bindingInfo.BinderModelName = WebHookErrorKeys.MessageKey; bindingInfo.BindingSource = BindingSource.Body; }
private void Apply( IWebHookBindingMetadata bindingMetadata, IWebHookRequestMetadata requestMetadata, ParameterModel parameter) { var bindingInfo = parameter.BindingInfo; if (bindingInfo?.BinderModelName != null || bindingInfo?.BinderType != null || bindingInfo?.BindingSource != null) { // User was explicit. Nothing to do. return; } if (bindingInfo == null) { bindingInfo = parameter.BindingInfo = new BindingInfo(); } var parameterName = parameter.ParameterName; var parameterType = parameter.ParameterInfo.ParameterType; switch (parameterName.ToUpperInvariant()) { case "ACTION": case "ACTIONS": case "ACTIONNAME": case "ACTIONNAMES": SourceEvent(bindingInfo, parameterType); break; case "DATA": SourceData(bindingInfo, requestMetadata); break; case "EVENT": case "EVENTS": case "EVENTNAME": case "EVENTNAMES": SourceEvent(bindingInfo, parameterType); break; case "ID": SourceId(bindingInfo, parameterType); break; case "RECEIVER": case "RECEIVERNAME": SourceReceiver(bindingInfo, parameterType); break; case "RECEIVERID": SourceId(bindingInfo, parameterType); break; case "WEBHOOKRECEIVER": SourceReceiver(bindingInfo, parameterType); break; default: // If additional parameters are configured and match, map them. If not, treat IFormCollection, // JContainer and XElement parameters as data. IsAssignableFrom(...) looks reversed because this // check is about model binding system support, not an actual assignment to the parameter. if (!TrySourceAdditionalParameter(bindingInfo, bindingMetadata, parameterName) && (typeof(IFormCollection).IsAssignableFrom(parameterType) || // ??? Any need to support simple JToken's? JContainer is the base for JArray and JObject. typeof(JContainer).IsAssignableFrom(parameterType) || typeof(XElement).IsAssignableFrom(parameterType))) { SourceData(bindingInfo, requestMetadata); } break; } }