gpt4 book ai didi

c# - 将 MultipartFormDataContent 从 Controller Action 方法发布到 WebApi Post 方法

转载 作者:行者123 更新时间:2023-11-30 16:45:23 24 4
gpt4 key购买 nike

在我的 ASP.NET MVC 项目中,我试图将图像从 Controller 操作方法发布到 API Controller 方法。计划是将此 API 用于其他客户端以用于上传图像。

我能够从 Controller Action 方法成功调用 API Post 方法,但无法传递图像对象。

这是我的HomeController.cs Upload 操作方法

[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");
}

在继承自 ApiController 的 Process Controller 中,我有以下 Post 方法

[HttpPost]
public async Task<string> Post([FromBody]MultipartFormDataContent formDataContent)
{
Task<string> imageContent = Request.Content.ReadAsStringAsync();
string body = imageContent.Result;
ImageResponse imageResponse = null;
//.................
//.................
return someValue
}

此处参数formDataContent始终为空,Request.Content.ReadAsStringAsync()为空

最佳答案

尝试像这样从 Controller 发送

//...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();
}

引用了这个答案:Upload image using HttpClient

关于c# - 将 MultipartFormDataContent 从 Controller Action 方法发布到 WebApi Post 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42212446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com