C# 将MultipartFormDataContent从控制器操作方法发布到WebApi发布方法
在我的ASP.NETMVC项目中,我试图将图像从控制器操作方法发布到API控制器方法。计划是利用此API向其他客户端上传图像 我能够从控制器操作方法成功地命中API Post方法,但无法传递图像对象 这是我的C# 将MultipartFormDataContent从控制器操作方法发布到WebApi发布方法,c#,asp.net,asp.net-mvc,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,在我的ASP.NETMVC项目中,我试图将图像从控制器操作方法发布到API控制器方法。计划是利用此API向其他客户端上传图像 我能够从控制器操作方法成功地命中API Post方法,但无法传递图像对象 这是我的HomeController.cs上传操作方法 [HttpPost] public async Task<ActionResult> Upload(FormCollection formCollection) { var baseUri = "http://localho
HomeController.cs
上传
操作方法
[HttpPost]
public async Task<ActionResult> Upload(FormCollection formCollection)
{
var baseUri = "http://localhost/api/Process";
HttpPostedFileBase file = Request?.Files[0];
if (file == null || (file.ContentLength <= 0) || string.IsNullOrEmpty(file.FileName))
return new EmptyResult();
string fileName = file.FileName;
byte[] fileBytes = new byte[file.ContentLength];
HttpContent stringContent = new StringContent(fileName);
HttpContent fileStreamContent = new StreamContent(file.InputStream);
HttpContent bytesContent = new ByteArrayContent(fileBytes);
using (var formDataContent = new MultipartFormDataContent())
{
formDataContent.Add(stringContent, "fileName", fileName);
formDataContent.Add(fileStreamContent, "inputStream", fileName);
formDataContent.Add(bytesContent, "fileBytes", fileName);
using (var httpClient = new HttpClient())
{
formDataContent.Headers.ContentType =
MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
var response = await httpClient.PostAsync(baseUri, formDataContent);
var content = await response.Content.ReadAsStringAsync();
//Handle the response
}
}
return View("Result");
}
此处参数
formDataContent
始终为空,并且Request.Content.ReadAsStringAsync()
为空
//...other code removed for brevity
using (var form = new MultipartFormDataContent()) {
var stringContent = new StringContent("fileToUpload");
form.Add(stringContent, "fileToUpload");
var streamContent = new StreamContent(file.InputStream);
streamContent.Headers.ContentType = MediaTypeHeaderValue.Parse(file.ContentType);
streamContent.Headers.ContentLength = file.ContentLength;
streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") {
Name = "fileToUpload",
FileName = file.FileName
};
form.Add(streamContent);
using (var httpClient = new HttpClient()) {
var response = await httpClient.PostAsync(baseUri, form);
//...other code removed for brevity
}
}
然后通过提取发送的信息在ApiController
中对其进行处理
[HttpPost]
public async Task<IHttpActionResult> Post() {
var content = Request.Content;
//get file name from content disposition
var fileName = content.Headers.ContentDisposition.FileName;
//Get file stream from the request content
var fileStream = await content.ReadAsStreamAsync();
//...other code removed for brevity
return Ok();
}
[HttpPost]
公共异步任务Post(){
var content=Request.content;
//从内容处置中获取文件名
var fileName=content.Headers.ContentDisposition.fileName;
//从请求内容获取文件流
var fileStream=await content.ReadAsStreamAsync();
//…为简洁起见,删除了其他代码
返回Ok();
}
引用此答案:是否尝试了
Request.Content.ReadAsMultipartAsync
?
[HttpPost]
public async Task<IHttpActionResult> Post() {
var content = Request.Content;
//get file name from content disposition
var fileName = content.Headers.ContentDisposition.FileName;
//Get file stream from the request content
var fileStream = await content.ReadAsStreamAsync();
//...other code removed for brevity
return Ok();
}