当前位置: 首页 > 知识库问答 >
问题:

我从发送文件列表。net5的mvc项目。Net5API,但仅获取一个文件,而不是文件列表

贺雪松
2023-03-14

我有以下两种型号:

public class Category
{
  public int Id { get; set; }
  public string Name { get; set; }
  public List<CategoryDetail> CategoryDetails { get; set; }
}


public class CategoryDetail
{
  public int Id { get; set; }
  public string Url { get; set; }
  public IFormFile File { get; set; }
  public Category Category { get; set; }
}

我可以绑定分类详细模型。NET5 mvc文件列表。问题是,我得到只有一个文件时,它张贴到。NET5 API.在我看来,MultipartFormDataContent在循环遍历每个文件时无法绑定多个文件。

下面的代码向API发送post请求

var multiForm = new MultipartFormDataContent();
multiForm.Add(new StringContent(entity.Id), "Id");
multiForm.Add(new StringContent(Convert.ToString(entity.Name)), "Name");

**foreach (var item in entity.CategoryDetails)
{
  int i = 0;
  multiForm.Add(new StringContent(item.Url), 
 "CategoryDetails[" + i + "].Url");
  multiForm.Add(new StreamContent(item.File.OpenReadStream()), 
 "CategoryDetails[" + i + "].File", item.File.FileName);
  i++;
}**

 var request = new HttpRequestMessage(HttpMethod.Post, url) { Content = multiForm };

 var accessToken = _context.HttpContext.User.Claims.FirstOrDefault(c => 
 c.Type==AppClaims.AccessToken)?.Value;
 if (!string.IsNullOrEmpty(accessToken))
 {
   request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
 }

 var client = _clientFactory.CreateClient("ApiServer");
 var response = await client.SendAsync(request).ConfigureAwait(false);

API控制器功能如下:

    [RequestSizeLimit(2147483648)]
    [HttpPost("add")]
    [Consumes(@"application/octet-stream", @"application/x-www-form-urlencoded", "multipart/form-data")]
    [ProducesResponseType(200, Type = typeof(BaseResponse))]

    public async Task<IActionResult> AddCategorySection([FromForm] 
    Category model)
    {
    }

共有1个答案

袁增
2023-03-14

以上代码将正常工作。我只是错误地初始化Foreach循环中的增量变量,每次初始化为0。正确的代码如下-

int i = 0;
foreach (var item in entity.CategoryDetails)
{
  multiForm.Add(new StringContent(item.Url), 
  "CategoryDetails[" + i + "].Url");
  multiForm.Add(new StreamContent(item.File.OpenReadStream()), 
  "CategoryDetails[" + i + "].File", item.File.FileName);
  i++;
}
 类似资料:
  • 问题内容: 我在文档文件夹中获取文件名的代码有什么问题? 我以为我已正确阅读了文档,并且我对documents文件夹中的内容非常确定,但是“ fileList”没有显示任何内容?“目录”显示文件夹的路径。 问题答案: 此解决方案适用于 Swift 4 (Xcode 9.2)和 Swift 5 (Xcode 10.2.1+): 这是一个可重用的FileManager扩展,它还允许您跳过或在结果中包含

  • 问题 你想获取文件系统中某个目录下的所有文件列表。 解决方案 使用 os.listdir() 函数来获取某个目录中的文件列表: import os names = os.listdir('somedir') 结果会返回目录中所有文件列表,包括所有文件,子目录,符号链接等等。 如果你需要通过某种方式过滤数据,可以考虑结合 os.path 库中的一些函数来使用列表推导。比如: import os.pa

  • 问题内容: 我想使用“文件类”从项目文件夹中获取文件,我该怎么办? 问题答案: 嗯,有很多不同的方法来获取Java文件,但这是一般要点。 不要忘记,您至少需要将其包装在a 中,因为File是其中的一部分,这意味着它必须具有try-catch块。 不是要解决Ericson的问题,而是如果您使用的是实际的软件包,则除非明确使用文件的位置,否则文件的位置将有问题。相对路径与Packages混为一谈。 即

  • 我们在KMM shared/commonMain项目中包含一个assets文件夹。该资产文件夹基本上包含许多JSON文件,这些文件在不同的子文件夹中结构化。 内置。gradle,资产文件夹被添加为android资源,因此它包含在构建AAR的根目录中。 在共享模块中,文件在通用Android中按需读取 这很好用。 现在到问题,读取文件夹: 当代码通过单元测试执行时,它会工作,然后返回文件夹。一旦AA

  • 我想通过使用“文件类”从项目文件夹中获取文件,我如何做到这一点?

  • 我将Xamarin.forms用于Android应用程序,并试图从CDCard获得文件列表。以下代码: 返回本地路径,而不是cd卡的路径/存储/仿真/0