gpt4 book ai didi

c# - 将文件从 ASP.NET Core Web API 发布到另一个 ASP.NET Core Web API

转载 作者:可可西里 更新时间:2023-11-01 08:37:33 29 4
gpt4 key购买 nike

我们正在构建一个由 Angular2 前端、ASP.NET Core Web API 公共(public)后端和 ASP.NET Core Web API 私有(private)后端组成的 Web 应用程序。

从 Angular2 上传文件到公共(public)后端是可行的。但我们更愿意将它们转发到私有(private)后端。

当前工作代码

[HttpPost]
public StatusCodeResult Post(IFormFile file)
{
...
}

从那里我可以使用 file.CopyTo(fileStream); 将文件保存到磁盘;

但是,我想重新发送那个文件,或者那些文件,或者理想情况下,将整个请求发送到我的第二个 Web API 核心。

我不确定如何使用 asp.net core 的 HttpClient 类实现这一点。

我试过各种方法,比如

StreamContent ss = new StreamContent(HttpContext.Request.Body);
var result = client.PostAsync("api/Values", ss).Result;

但是我的第二个后端得到一个空的 IFormFile。

我觉得可以将文件作为流发送并在另一端重建它们,但无法让它工作。

解决方案必须使用两个 web api 核心。

最佳答案

解决方案

DMZ 中的公共(public)后端

[HttpPost]
public StatusCodeResult Post(IFormFile file)
{
try
{
if (file != null && file.Length > 0)
{
using (var client = new HttpClient())
{
try
{
client.BaseAddress = new Uri(currentPrivateBackendAddress);

byte[] data;
using (var br = new BinaryReader(file.OpenReadStream()))
data = br.ReadBytes((int)file.OpenReadStream().Length);

ByteArrayContent bytes = new ByteArrayContent(data);


MultipartFormDataContent multiContent = new MultipartFormDataContent();

multiContent.Add(bytes, "file", file.FileName);

var result = client.PostAsync("api/Values", multiContent).Result;


return StatusCode((int)result.StatusCode); //201 Created the request has been fulfilled, resulting in the creation of a new resource.

}
catch (Exception)
{
return StatusCode(500); // 500 is generic server error
}
}
}

return StatusCode(400); // 400 is bad request

}
catch (Exception)
{
return StatusCode(500); // 500 is generic server error
}
}

私有(private)后台

[HttpPost]
public void Post()
{
//Stream bodyStream = HttpContext.Request.Body;

if (Request.HasFormContentType)
{
var form = Request.Form;
foreach (var formFile in form.Files)
{
var targetDirectory = Path.Combine(_appEnvironment.WebRootPath, "uploads");

var fileName = GetFileName(formFile);

var savePath = Path.Combine(targetDirectory, fileName);

using (var fileStream = new FileStream(savePath, FileMode.Create))
{
formFile.CopyTo(fileStream);
}
}
}
}

关于c# - 将文件从 ASP.NET Core Web API 发布到另一个 ASP.NET Core Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39397278/

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