当前位置: 首页 > 编程语言 > C#

CustomFormDataandMultipleFilestoWebAPIControllerSharing

时间:2023-04-11 02:07:47 C#

CustomFormDataandMultipleFilestoWebAPIController问题。javascript上传函数:$scope.upload[index]=$upload.upload({url:'/api/upload/',method:'POST',data:{Photographer:$scope.models[index].photographer,Description:$scope.models[index].desc},file:$scope.models[index].file})form-data:随心所欲地工作,对于发送的每个请求,它都包含我想要的值。------WebKitFormBoundaryzlLjAnm449nw1EvC内容配置:表单数据;name="Photographer"ScottJohnson------WebKitFormBoundaryzlLjAnm449nw1EvCContent-Disposition:form-data;name="Description"使用Nikoncamerea拍摄的图片------WebKitFormBoundaryzlLjAnm449nw1EvCContent-Disposition:form-data;名称=“文件”;filename="moxnes.jpg"Content-Type:image/jpeg我的WebAPI控制器:本指南中的模板publicclassUploadController:ApiController{publicasyncTaskPostFormData(){varroot=HttpContext.Current.Server.MapPath(“?/App_Data”);varprovider=newMultipartFormDataStreamProvider(root);try{//读取表单数据。等待Request.Content.ReadAsMultipartAsync(provider);//显示所有键值对。foreach(varkeyinprovider.FormData.AllKeys){foreach(varvalinprovider.FormData.GetValues(key)){varkeyValue=string.Format("{0}:{1}",key,val);}}foreach(MultipartFileDatafileDatainprovider.FileData){varfileName=fileData.Headers.ContentDisposition.文件名;}返回Request.CreateResponse(HttpStatusCode.OK);}catch(Exceptione){returnRequest.CreateErrorResponse(HttpStatusCode.InternalServerError,e);问题出在这里:控制器可以接收多个请求并使用此循环读取所有文件:foreach(MultipartFileDatafileDatainprovider.FileData)工作正常,但我的其他表单数据值(Photographer和Description)仅包含一个值请求(收到的最后一个请求)foreach(provider.FormData.AllKeys中的varkey)我需要从每个请求表单中获取数据值。我该怎么做,或者有更好的方法来解决这个问题吗?也许通过添加模型作为参数?我将它与它一起使用,它对我来说效果很好:publicpartialclassUploadController:ApiController{[HttpPost]publicTaskPostFormData(){//检查请求是否包含multipart/form-data。如果(!Request.Content.IsMimeMultipartContent()){thrownewHttpResponseException(HttpStatusCode.UnsupportedMediaType);}stringroot=HttpContext.Current.Server.MapPath("~/App_Data");varprovider=newMultipartFormDataStreamProvider(root);//读取表单数据并返回一个异步任务。vartask=Request.Content.ReadAsMultipartAsync(provider).ContinueWith(t=>{if(t.IsFaulted||t.IsCanceled){Request.CreateErrorResponse(HttpStatusCode.InternalServerError,t.Exception);}foreach(提供程序中的MultipartFileData文件.FileData){using(StreamReaderfileStream=newStreamReader(file.LocalFileName)){if(provider.FormData.AllKeys.AsParallel().Contains("demo")){//成功从表单数据中读取演示键值}else{//失败的从表单中读取演示键值。}}}returnRequest.CreateResponse(HttpStatusCode.OK,"OK");});回归任务;}...我创建了一个MediaTypeFormatter来解码multipart/form-data并传递模型绑定提供了HttpPostedFileBase,它使文件上传与任何其他API参数一样容易。它目前将完整的文件上传加载到内存中,但可以轻松调整格式化程序以将上传的数据写入临时上传目录。https://gist.github.com/Danielku15/bfc568a19b9e58fd9e80只需在API配置中注册formatter,即可在数据传输模型中使用:以上是C#学习教程:自定义表单数据和多文件的全部内容WebAPI控制器分享,如果对你有用,需要了解更多C#学习教程,希望大家多多关注—Configuration.Formatters.Add(newFormMultipartEncodedMediaTypeFormatter());本文收集自网络,并不代表侵权,如有侵权,请点击右边联系管理员删除。如需转载请注明出处: