接收multipart form-data时,json参数为空。
接收multipart form-data时,json参数为空。
我正在尝试接收来自Postman
的多部分请求,其中包含3个参数:
- 一个
int
- 一个
file
- 一个
Json
我在控制器中收到了file
和integer
,但是json中的所有字段都为null。可能出了什么问题?
Json
[Serializable] public class ProcessingRecipe { [JsonPropertyName("fileId")] public string FileID { get; set; } [JsonPropertyName("srcLang")] public string SrcLang { get; set; } }
控制器
[HttpPost] [Route(Routes.Routes.File.PROCESS)] public async Task<ActionResult> ProcessFileAsync([FromForm]IFormFile uploadFile,[FromForm] ProcessingRecipe recipe,[FromForm]int aa) { //the file is ok // the int is 33 }
Postman
更新 !!!!!
我已经按照这篇文章的方法,但没有效果:
自定义绑定器
public class JsonModelBinder : IModelBinder { public Task BindModelAsync(ModelBindingContext bindingContext) { if (bindingContext == null) { throw new ArgumentNullException(nameof(bindingContext)); } // Check the value sent in var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); if (valueProviderResult != ValueProviderResult.None) { bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueProviderResult); // Attempt to convert the input value var valueAsString = valueProviderResult.FirstValue; var result = Newtonsoft.Json.JsonConvert.DeserializeObject(valueAsString, bindingContext.ModelType); if (result != null) { bindingContext.Result = ModelBindingResult.Success(result); return Task.CompletedTask; } } return Task.CompletedTask; } }
控制器操作
public async Task<ActionResult> ProcessFileAsync([FromForm]IFormFile uploadFile,[ModelBinder(typeof(JsonModelBinder))] ProcessingRecipe recipe) { //the file is ok // the int is 33 }
admin 更改状态以发布 2023年5月21日