微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将文件从ASP.NET MVC 4.6应用程序发布到ASP.NET Core Web API

如何解决将文件从ASP.NET MVC 4.6应用程序发布到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)
{
    //...

测试结果

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。