首页 > 解决方案 > .NET Core - 如何上传 JSON 文件?

问题描述

我正在尝试上传 JSON 文件以从中读取值并将它们保存在数据库中,但我对此有疑问。我的控制器的代码如下所示:

[Produces("application/json")]
[Route("api/[controller]")]
[ApiController]
public class ImportController : ControllerBase
{

    private readonly DatabaseContext dbContext;

    public ImportController(DatabaseContext dbContext)
    {
        this.dbContext = dbContext;
    }

    [HttpPost]
    public IActionResult ImportData(IFormFile file)
    {
        var content = string.Empty;

        using (var reader = new StreamReader(file.OpenReadStream()))
        {
            content = reader.ReadToEnd();
        }

        List<UserModel> userObjects = null;
        try
        {
            userObjects = JsonConvert.DeserializeObject<List<UserModel>>(content);
        }
        catch
        {
            return BadRequest();
        }

        foreach (var user in userObjects)
        {

             UserModel us = new UserModel
             {
                 Username = user.Username,
                 Password = user.Password
             };

             dbContext.User.Add(us);
             dbContext.SaveChanges();
        }

        return Ok();
    }

}

我正在使用 Postman 发送 JSON 数据,但每当我尝试这样做时,都会得到以下响应:

{"用户名":["输入无效。"]}

当我尝试将 JSON 数据作为 raw->application/json 或

{"":["输入无效。"]}

当我尝试使用名为“文件”的键和 test.json 文件作为值的表单数据发送它时。

你能指引我走向正确的道路吗?我尝试将其[FromBody] UserModel user用作操作的参数,但它只允许我处理一个 JSON 字符串。

标签: jsonasp.net-mvcapiasp.net-core

解决方案


您可以使用[FromBody] IEnumerable<UserModel> users来处理许多行。在这种情况下,json 应该如下所示:

[
 {
  "userName": "name",
  "password": "password",
 },
 {
  "userName": "name1",
  "password": "password1",
 }
]

推荐阅读