C# 将MultipartFormDataContent从控制器操作方法发布到WebApi发布方法

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

在我的ASP.NETMVC项目中,我试图将图像从控制器操作方法发布到API控制器方法。计划是利用此API向其他客户端上传图像

我能够从控制器操作方法成功地命中API Post方法,但无法传递图像对象

这是我的
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();
}