Мне нужно создать API для чтения данных из файла JSON и сохранения их в базе данных. Так что я сделал это, и он отлично работает, когда я отправляю файл с помощью Почтальона. Но мне также нужно иметь возможность выполнять ту же операцию, используя форму, на мой взгляд, и я не могу найти решение для этого.
ImportController.cs
[Produces("application/json")]
[Route("api/Import")]
public class ImportController : ControllerBase
{
private readonly DbContext dbContext;
public ImportController(DbContext dbContext)
{
this.dbContext = dbContext;
}
[HttpPost]
[Route("ImportData")]
public IActionResult ImportData(IFormFile file)
{
var content = string.Empty;
using (var reader = new StreamReader(file.OpenReadStream()))
{
content = reader.ReadToEnd();
}
List<UserImportModel> userObjects = null;
try
{
userObjects = JsonConvert.DeserializeObject<List<UserImportModel>>(content);
}
catch
{
return BadRequest();
}
foreach (var user in userObjects)
{
UserModel us = new UserModel
{
Username = user.Username,
Password = user.Password,
Created = DateTime.UtcNow
};
dbContext.User.Add(us);
dbContext.SaveChanges();
}
return Ok();
}
Форма на мой взгляд
<form method="post" enctype="multipart/form-data" action="../api/Import/ImportData">
<input type="file" name="file" id="file">
<input type="submit" value="Upload file" name="submit">
</form>
Когда я вхожу в Инструменты разработчика в браузере и нажимаю кнопку Отправить, в качестве параметров POST отображаются следующие данные:
-----------------------------209091002211274
Content-Disposition: form-data; name="file"; filename="test.json"
Content-Type: application/json
[{"Username":"user1","Password":"123456"},{"Username":"user2","Password":"654321"}]
-----------------------------209091002211274
Content-Disposition: form-data; name="submit"
Upload file
-----------------------------209091002211274--
Это заставляет меня поверить, что файл и его данные отправлены, верно?