Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将文件从ASP.NET MVC 4.6应用程序发布到ASP.NET核心Web API_C#_Asp.net Mvc_Asp.net Core Webapi_Httppostedfilebase - Fatal编程技术网

C# 将文件从ASP.NET MVC 4.6应用程序发布到ASP.NET核心Web API

C# 将文件从ASP.NET MVC 4.6应用程序发布到ASP.NET核心Web API,c#,asp.net-mvc,asp.net-core-webapi,httppostedfilebase,C#,Asp.net Mvc,Asp.net Core Webapi,Httppostedfilebase,我有一个ASP.NET MVC web应用程序在.NET Framework 4.6中使用 我需要能够上传文件,然后将它们转发到ASP.NET Core 3.1 Web API 问题是我不知道如何将文件从客户端应用程序发送到API API接受如下请求: public class ReportUploadRequest { public List<IFormFile> Files { get; set; } public int FolderId { get; set;

我有一个ASP.NET MVC web应用程序在.NET Framework 4.6中使用

我需要能够上传文件,然后将它们转发到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; }
}
我无法确定如何将
HttpPostedFileBase[]文件
文件转换为Web API所需的
列表文件
格式

我已尝试使用
列表文件
在控制器中接收文件,但提交时
文件
为空

我如何准备我的表单,以便以符合Web API的格式使用?

我不确定这是否是您所要求的,但我认为可能是这样。我发现只要我能从二进制文件中获取一些东西,那么我就是金色的。这也为我提供了与其他语言(如C++)的良好互操作性

如果不是你要的。。告诉我,我将删除我的答案

这就是我所做的。我特别需要将二进制数据传递给我的控制器并返回二进制数据

对于我的用例,秘密在应用程序/octet流中

[路由(“api/[控制器]”)]
[ApiController]
公共类控制器:ControllerBase
{
[HttpPost]
[产生(“应用程序/八位字节流”)]
公共异步任务GetBinaryThingy()
{
使用(var reader=newstreamreader(HttpContext.Request.Body))
{
使用(MemoryStream ms=new MemoryStream())
{
wait reader.BaseStream.CopyToAsync(ms);
var buffer=ms.ToArray();
//缓冲区现在保存来自客户端的二进制数据
}
}
byte[]bytes\u return=null//在此处填充二进制返回。
返回新的内存流(字节\返回);
}
}
在客户身上。。大概是这样的:

    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;
    }
public async System.Threading.Tasks.Task PostBinarySuffAsync(字节[]缓冲区)
{
ByteArrayContent byteContent=新的ByteArrayContent(缓冲区);
var response=wait client.PostAsync(dangServerURL,byteContent);
var responseBytes=await response.Content.ReadAsByteArrayAsync();
返回响应字节;
}
我需要能够上传文件,然后将它们转发到ASP.NET Core 3.1 Web API

要实现您的需求,您可以参考以下代码片段

在ASP.NET MVC控制器操作中

公共异步任务

[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;
    }
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)
    {
        //...
    }
public async Task<IActionResult> UploadFile([FromForm]List<IFormFile> files)
{
    //...