![](/img/trans.png)
[英]How to make a PUT request from ASP.NET core mvc to Web API in asp.net core?
[英]Posting a file from ASP.NET MVC 4.6 application to ASP.NET Core Web API
我有一個在 .NET Framework 4.6 中使用的 ASP.NET MVC Web 應用程序。
我需要能夠上傳文件,然后將它們轉發到 ASP.NET Core 3.1 Web API。
問題是我不知道如何將文件從客戶端應用程序發送到 API。
API 接受這樣的請求:
public class ReportUploadRequest
{
public List<IFormFile> Files { get; set; }
public int FolderId { get; set; }
public int BrokerId { get; set; }
}
並且 ASP.NET MVC 應用程序有一個控制器函數,它接受表單提交並嘗試發布到 API。
表單中的文件在 ASP.NET MVC 中接收,如下所示:
HttpPostedFileBase[] Files
我不知道如何將HttpPostedFileBase[] Files
文件轉換為 Web API 所需的List<IFormFile> Files
格式。
我嘗試使用List<IFormFile> Files
在我的控制器中接收文件,但Files
在提交時為空
如何准備我的表單以適合 Web API 的格式使用?
我不確定這是否是您所要求的,但我認為可能是。 我發現只要我能從二進制中得到一些東西,那么我就是金子。 這也為我提供了與 C+++ 等其他語言的良好互操作性。
如果不是你要問的..告訴我,我會刪除我的答案。
這就是我所做的。 我特別需要將二進制數據傳遞給我的控制器並返回二進制數據。
對於我的用例,秘密在於application/octet-stream 。
[Route("api/[controller]")]
[ApiController]
public class SomeDangController : ControllerBase
{
[HttpPost]
[Produces("application/octet-stream")]
public async Task<Stream> GetBinaryThingy()
{
using (var reader = new StreamReader(HttpContext.Request.Body))
{
using (MemoryStream ms = new MemoryStream())
{
await reader.BaseStream.CopyToAsync(ms);
var buffer = ms.ToArray();
//buffer now holds binary data from the client
}
}
byte[] bytes_return = null //populate your binary return here.
return new MemoryStream(bytes_return);
}
}
在客戶端..是這樣的:
public async System.Threading.Tasks.Task<byte[]> PostBinaryStuffAsync(byte[] buffer)
{
ByteArrayContent byteContent = new ByteArrayContent(buffer);
var response = await client.PostAsync(dangServerURL, byteContent);
var responseBytes = await response.Content.ReadAsByteArrayAsync();
return responseBytes;
}
我需要能夠上傳文件,然后將它們轉發到 ASP.NET Core 3.1 Web API。
為了實現您的要求,您可以參考以下代碼片段。
在 ASP.NET MVC 控制器操作中
public async Task<ActionResult> UploadFile(HttpPostedFileBase[] files)
{
var formContent = new MultipartFormDataContent();
foreach (var file in files)
{
formContent.Add(new StreamContent(file.InputStream), "files", Path.GetFileName(file.FileName));
}
var myHttpClient = new HttpClient();
var response = await myHttpClient.PostAsync("https://xxxx/xxxx/UploadFile", formContent);
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
//...
}
在 ASP.NET Core 中操作方法
public async Task<IActionResult> UploadFile([FromForm]List<IFormFile> files)
{
//...
測試結果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.