我正在尝试上载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或
发送时{“”:[“输入无效。”]}
当我尝试通过键为“ file”和test.json文件为值的表单数据发送它时。
您能指引我正确的方向吗?我尝试将[FromBody] UserModel user
用作操作的参数,但这只允许我处理一个JSON字符串。
答案 0 :(得分:1)
您可以使用[FromBody] IEnumerable<UserModel> users
处理许多行。在这种情况下,json应该看起来像:
[
{
"userName": "name",
"password": "password",
},
{
"userName": "name1",
"password": "password1",
}
]
答案 1 :(得分:0)
您需要以一种或另一种方式标准化您的方法。如果要接受JSON,则使用List<UserViewModel>
属性绑定到类型为[FromBody]
的操作参数,并在客户端使用JavaScript的FileReader
来获取加载的实际内容归档并发布内容,而不是文件。
如果您想通过文件上传来进行操作,则可以保持原样,但是您还需要发送自己的“ JSON”作为文件上传。这可以通过在JavaScript中使用FormData
并从JSON对象作为字符串手动创建Blob
来实现。
长短短短,无论选择哪种方式,都应统一。在同一操作中,无法同时发布JSON对象和恰好是扩展名为.json
的文本文件。
答案 2 :(得分:0)
我解决了它...我要做的就是删除[ApiController]
属性。具有该属性会导致应用程序根本不访问我的ImportData方法。