//Implements #region # 执行参数模型绑定 —— async Task BindModelAsync(ModelBindingContext bindingContext) /// <summary> /// 执行参数模型绑定 /// </summary> public async Task BindModelAsync(ModelBindingContext bindingContext) { HttpContext httpContext = bindingContext.HttpContext; #region # 验证 if (bindingContext == null) { throw new ArgumentNullException(nameof(bindingContext)); } if (httpContext.Request.Method != HttpMethod.Post.ToString()) { throw new InvalidOperationException("Only post method available !"); } if (!httpContext.Request.ContentType.StartsWith("application/json") && !httpContext.Request.ContentType.StartsWith("application/x-www-form-urlencoded")) { bindingContext.Result = ModelBindingResult.Failed(); return; } #endregion NameValueCollection parameters = await this.ParseParametersFromBody(httpContext.Request); string parameterValue = parameters.Get(bindingContext.FieldName); object typicalValue = ParameterExtension.TypifyParameterValue(bindingContext.ModelType, parameterValue, this._jsonSerializerSettings); bindingContext.Result = ModelBindingResult.Success(typicalValue); }
/// <summary> /// 执行参数绑定 /// </summary> public override async Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken) { JsonSerializerSettings jsonSerializerSettings = actionContext.ControllerContext.Configuration.Formatters.JsonFormatter.SerializerSettings; NameValueCollection parameters = await this.ParseParametersFromBody(actionContext.Request, jsonSerializerSettings); string parameterValue = parameters.Get(base.Descriptor.ParameterName); object typicalValue = ParameterExtension.TypifyParameterValue(base.Descriptor.ParameterType, parameterValue, jsonSerializerSettings); base.SetValue(actionContext, typicalValue); }
/// <summary> /// 执行参数绑定 /// </summary> public override async Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken) { #region # 验证 if (!actionContext.Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } #endregion IDictionary <string, object> parameters = await this.ParseParametersFromBody(actionContext.Request); object parameterValue = parameters.ContainsKey(base.Descriptor.ParameterName) ? parameters[base.Descriptor.ParameterName] : null; if (parameterValue != null) { object paramValue; if (base.Descriptor.ParameterType == typeof(IFormFile)) { const string undefined = "undefined"; if (string.IsNullOrWhiteSpace(parameterValue.ToString()) || parameterValue.ToString() == undefined) { paramValue = null; } else { if (parameterValue is IFormFileCollection formFiles) { paramValue = formFiles[0]; } else if (parameterValue is IFormFile formFile) { paramValue = formFile; } else { paramValue = null; } } } else if (base.Descriptor.ParameterType == typeof(IFormFileCollection)) { const string undefined = "undefined"; if (string.IsNullOrWhiteSpace(parameterValue.ToString()) || parameterValue.ToString() == undefined) { paramValue = new FormFileCollection(); } else { if (parameterValue is IFormFileCollection formFiles) { paramValue = formFiles; } else if (parameterValue is IFormFile formFile) { FormFileCollection formFileCollection = new FormFileCollection(); formFileCollection.Add(formFile); paramValue = formFileCollection; } else { paramValue = new FormFileCollection(); } } } else { //除文件外,按类型化参数处理 JsonSerializerSettings jsonSerializerSettings = actionContext.ControllerContext.Configuration.Formatters.JsonFormatter.SerializerSettings; paramValue = ParameterExtension.TypifyParameterValue(base.Descriptor.ParameterType, parameterValue, jsonSerializerSettings); } base.SetValue(actionContext, paramValue); } else { base.SetValue(actionContext, null); } }
//Implements #region # 执行参数模型绑定 —— Task BindModelAsync(ModelBindingContext bindingContext) /// <summary> /// 执行参数模型绑定 /// </summary> public Task BindModelAsync(ModelBindingContext bindingContext) { HttpContext httpContext = bindingContext.HttpContext; #region # 验证 if (bindingContext == null) { throw new ArgumentNullException(nameof(bindingContext)); } if (httpContext.Request.Method != HttpMethod.Post.ToString()) { throw new InvalidOperationException("Only post method available !"); } if (!httpContext.Request.ContentType.StartsWith("multipart/form-data")) { bindingContext.Result = ModelBindingResult.Failed(); return(Task.CompletedTask); } #endregion IDictionary <string, object> parameters = this.ParseParametersFromBody(httpContext.Request); object parameterValue = parameters.ContainsKey(bindingContext.FieldName) ? parameters[bindingContext.FieldName] : null; if (parameterValue != null) { object typicalValue; if (bindingContext.ModelType == typeof(IFormFile)) { const string undefined = "undefined"; if (string.IsNullOrWhiteSpace(parameterValue.ToString()) || parameterValue.ToString() == undefined) { typicalValue = null; } else { if (parameterValue is IFormFileCollection formFiles) { typicalValue = formFiles[0]; } else if (parameterValue is IFormFile formFile) { typicalValue = formFile; } else { typicalValue = null; } } } else if (bindingContext.ModelType == typeof(IFormFileCollection)) { const string undefined = "undefined"; if (string.IsNullOrWhiteSpace(parameterValue.ToString()) || parameterValue.ToString() == undefined) { typicalValue = new FormFileCollection(); } else { if (parameterValue is IFormFileCollection formFiles) { typicalValue = formFiles; } else if (parameterValue is IFormFile formFile) { FormFileCollection formFileCollection = new FormFileCollection(); formFileCollection.Add(formFile); typicalValue = formFileCollection; } else { typicalValue = new FormFileCollection(); } } } else { //除文件外,按类型化参数处理 typicalValue = ParameterExtension.TypifyParameterValue(bindingContext.ModelType, parameterValue, this._jsonSerializerSettings); } bindingContext.Result = ModelBindingResult.Success(typicalValue); } else { bindingContext.Result = ModelBindingResult.Success(null); } return(Task.CompletedTask); }