.NET Core - Как передать файл из View в Controller в качестве его параметра? - PullRequest
0 голосов
/ 06 сентября 2018

Мне нужно создать 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--

Это заставляет меня поверить, что файл и его данные отправлены, верно?

1 Ответ

0 голосов
/ 06 сентября 2018

Я думаю, это потому, что это массив [] объектов, а не коллекция JSON {}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...