【发布时间】:2020-09-17 20:51:35
【问题描述】:
问题:是否可以使用 httpclient 将 HttpPostedFileBase(仅在内存中可用,而不在磁盘上。)发布到另一个端点?
我的尝试:
我有以下控制器,我们从前端发布一个文件,它绑定到文件参数。
public class HomeController : Controller
{
[System.Web.Http.HttpPost]
public async Task<string> Index(HttpPostedFileBase file)
{
//file is not null here, everything works as it should.
//Here im preparing a multipart/form-data request to my api endpoint
var fileStreamContent = new StreamContent(file.InputStream);
using (var client = new HttpClient())
using (var formData = new MultipartFormDataContent())
{
formData.Add(fileStreamContent);
var response = await client.PostAsync("http://restapi.dev/api/files/add", formData);
var result = await response.Content.ReadAsStringAsync();
return result;
}
}
}
我需要将此请求传递给另一个不公开的应用程序(因此我们不能直接从客户端发布) 该控制器如下所示:
[RoutePrefix("api/files")]
public class FilesController : ApiController
{
[HttpPost]
[Route("add")]
public async Task<HttpResponseMessage> Add(HttpPostedFileBase file)
{
//This is the problem, file is always null when I post from my backend.
var files = HttpContext.Current.Request.Files.Count > 0 ? HttpContext.Current.Request.Files[0] : null;
return Request.CreateResponse(HttpStatusCode.OK);
}
}
file 始终为空,files 也是如此。
我错过了什么?当我使用邮递员并直接发布到 API 端点时,它可以工作。所以我猜我在我的HomeController 中做错了什么?
【问题讨论】:
-
所以这是一个简单的代理到另一台服务器?第一个控制器是什么? MVC/WebAPI?会不会是 WebAPI?
-
没错,第一个控制器是 MVC 控制器,第二个是 WebAPI 控制器。如果这样更容易解决问题,我可以更改它们的类型。理想情况下,我只想将第一个请求直接传递给我的 api 控制器。
标签: c# multipartform-data