I have to create API to read data from JSON file and save it into database. So I did it and it works fine when I send file using Postman. But I also need to be able to do the same operation using form in my view and I cannot figure out solution for it.
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 in my view
<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>
When I enter Developer Tools in my browser and click submit, following data is displayed as POST parameters:
-----------------------------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--
It leads me to believe that file and its data is send, is that right?
>(body);`, because userObjects remains null after that. Maybe it's because of "not-clear" JSON: `"-----------------------------914163675013\r\nContent-Disposition: form-data; name=\"file\"; filename=\"test.json\"\r\nContent-Type: application/json\r\n\r\n[{\"Username\":"user1",\"Password\":\"123456\"}]\r\n-----------------------------914163675013\r\nContent-Disposition: form-data; name=\"submit\"\r\n\r\nUpload file\r\n-----------------------------914163675013--\r\n"`
– Kamil Sep 06 '18 at 15:14