gpt4 book ai didi

c# - 无法使用 C# 客户端将 IFormFile 发送到 ASP.Net Core Web API

转载 作者:太空宇宙 更新时间:2023-11-03 21:02:01 24 4
gpt4 key购买 nike

我有一个 ASP.Net Core Web API,其 Controller POST 方法定义如下:

[HttpPost("SubmitFile")]
public async Task<IActionResult> SubmitFile(IFormFile file)
{
}

我有一个调用 API SubmitFile() 方法的客户端方法,定义如下:

[HttpPost]
public async Task<IActionResult> Index(ICollection<IFormFile> files)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(_options.SiteSpecificUrl);

foreach (var file in files)
{
if (file.Length <= 0)
continue;

var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
var fileContent = new StreamContent(file.OpenReadStream());
fileContent.Headers.Add("X-FileName", fileName);
fileContent.Headers.Add("X-ContentType", file.ContentType);

var response = await client.PostAsync(_options.WebApiPortionOfUrl, fileContent);
}
}

return View();
}

执行客户端发送时,在服务器端,SubmitFile() 中的断点显示文件参数为空。如何正确发送文件?保留服务器端 API 很重要,因为我有 Swashbuckle/Swagger 正确生成可以发送文件的 UI。

最佳答案

我找到了几种方法来做到这一点。这里是最简单的。请注意,这是一个 ASP.Net Core 客户端解决方案:

[HttpPost]
public async Task<IActionResult> Index(ICollection<IFormFile> files)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(_options.SiteSpecificUrl);

foreach (var file in files)
{
if (file.Length <= 0)
continue;

var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');

using (var content = new MultipartFormDataContent())
{
content.Add(new StreamContent(file.OpenReadStream())
{
Headers =
{
ContentLength = file.Length,
ContentType = new MediaTypeHeaderValue(file.ContentType)
}
}, "File", fileName);

var response = await client.PostAsync(_options.WebApiPortionOfUrl, content);
}
}
}
}

此 Controller 方法从 .cshtml 页面调用,如下所示:

@{
ViewData["Title"] = "Home Page";
}

<form method="post" asp-action="Index" asp-controller="Home" enctype="multipart/form-data">
<input type="file" name="files" multiple />
<input type="submit" value="Upload" />
</form>

此表单显示两个按钮,“选择文件”和“上传”,前者显示“选择文件”对话框,后者调用 HomeController.Index 方法。

关于c# - 无法使用 C# 客户端将 IFormFile 发送到 ASP.Net Core Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44593881/

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