首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过html5 FormData将多部分/表单数据发布到c# Api

通过html5 FormData将多部分/表单数据发布到c# Api
EN

Stack Overflow用户
提问于 2018-05-31 00:21:54
回答 1查看 338关注 0票数 0

我的问题是,当我在这里检查多部分数据时,我的c#应用程序接口控制器正在回退FormData Post请求:IsMimeMultipartContent(),然后它将消息抛回给UI:

代码语言:javascript
复制
415 (Unsupported Media Type)

代码语言:javascript
复制
 [HttpPost]
 [Route("MediaUpload")]
public async Task<HttpResponseMessage> MediaUpload([FromUri]string sessionId, [FromUri]string patientId)
    {

        if (!Request.Content.IsMimeMultipartContent())
        {    // *** ALWAYS THROWS ERROR ***
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }
        
        //access form data  
        var provider = await Request.Content.ReadAsMultipartAsync(new InMemoryMultipartFormDataStreamProvider());            
        NameValueCollection formData = provider.FormData;
            
        //... additional code omitted
        
        var response = Request.CreateResponse(HttpStatusCode.OK);
        response.Headers.Add("UploadPath", fullPath);
        response.Headers.Add("Access-Control-Allow-Origin", "*");
        return response;
    }

我的前端负载如下所示:

  • REQUEST HEADERS

代码语言:javascript
复制
POST /api/import/MediaUpload?sessionID=c83f9589-742e-40e3-8cf5-7ffff141c3d7&patientId=5981 HTTP/1.1
Host: localhost:56703
Connection: keep-alive
Content-Length: 6545
Accept: application/json, text/plain, */*
Origin: http://localhost:4200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
Content-Type: multipart/form-data
Referer: http://localhost:4200/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

  • REQUEST PAYLOAD

代码语言:javascript
复制
------WebKitFormBoundaryVrKSHPqdT9c6JkKv
Content-Disposition: form-data; name="enctype"

multipart/form-data
------WebKitFormBoundaryVrKSHPqdT9c6JkKv
Content-Disposition: form-data; name="MediaInfo"

[{"PatientID":5981,"PatientLastName":"Hobo","PatientFirstName":"John","DeviceID":"123","InstanceID":89,"PatientDOB":"1/3/1970","FileName":"image2.jpg","FileSize":5880,"ExamDate":"5/30/2018","PatientID":66665981,"SessionID":"sessionID=9999141c3d7"}]
------WebKitFormBoundaryVrKSHPqdT9c6JkKv
Content-Disposition: form-data; name="files[]"; filename="image2.jpg"
Content-Type: image/jpeg

ÿØÿàJFIFÿÛC															

------WebKitFormBoundaryVrKSHPqdT9c6JkKv--

我的前端发送的是在下面的TypeScript方法中生成的FormData,然后调用下面的importService

代码语言:javascript
复制
save() {
	let params = { patientID: ''};
	let exDate = new Date(this.defaultDate).toLocaleDateString();
	
	// Populate MediaInfo object
	let minfo = this.SetMediaArray();
	params.pID = minfo[0].PID;
	
	const formData = new FormData();
	formData.set("enctype", "multipart/form-data" );	// doesn't make a difference..
	formData.append("MedInfo",  JSON.stringify(minfo));

	for(var i=0; i<this.importImages.length; i++){
		// append images to the files[] array, then send formData object to impService
		formData.append("files[]", this.dataURItoBlob(this.importImages[i].TnUrl), this.importImages[i].name);
	}

	let endpoint = this.selectedObj.Url;			
	
	this.importService.saveImportObjects(formData, params, endpoint).subscribe(
		data=> {			
			console.log(data);			
		},
		err => {         
			console.log(err);			
		}
	); 
}

所以基本上我想知道我到底遗漏了什么http选项才能正常工作。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-12 05:10:36

我删除了multipart/边界标头属性,让浏览器为您处理它。上传成功了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50609423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档