Почему данные не передаются контроллеру? - PullRequest
1 голос
/ 05 мая 2020

У меня следующая форма:

<form asp-controller="Chat" asp-action="AddFile" method="post"  asp-route-chatId="@Model.ChatId" enctype="multipart/form-data">
                    <textarea id="messageInput" class="textInput" style="width: 80vh" name="messageInput"></textarea>
                    <div>
                        <input type="submit" id="sendButton" value="Send Message" />
                        <input type="file" class="inputfile " id="File" name="File" value="File"/>
                        <label for="File">Choose a file</label>
                    </div>
                </form>

ViewModel

public class ChatFileViewModel
{
    public long ChatId { get; set; }
    public string messageInput { get; set; }
    public IFormFile File { get; set; }
}

и метод публикации:

[HttpPost]
    public void AddFile([FromBody] ChatFileViewModel chatFile)
    { ... }

Проблема в том, что каждый раз, когда я нажимаю кнопку «Отправить» передает ChatId правильно, а messageInput и File имеют значение null. Понятия не имею, что это такое, потому что точно такая же конструкция корректно работает в другой части моего приложения.

Ответы [ 3 ]

1 голос
/ 05 мая 2020

Использование [FromBody] Чтобы заставить веб-API читать simple type из тела запроса, но ваш объект представляет собой сложную строку, содержащую строку, и int не может рассматриваться как простой тип.

Удалить FormBody, я воспроизвожу и это сработало

enter image description here

Подробнее о FormBody https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

0 голосов
/ 05 мая 2020

, если вам нужно указать привязку, вы можете использовать [FromForm], потому что вы правильно настроили в multipart/form-data, но это зависит от ваших других действий

 public IActionResult AddFile([FromForm]ChatFileViewModel model)

, если вы используете asp - помощники тегов, вы также можете использовать их для элементов управления

<form asp-controller="Home" asp-action="AddFile" method="post"  asp-route-chatId="@Model.ChatId" enctype="multipart/form-data">
    <textarea asp-for="messageInput" class="textInput" style="width: 80vh" name="messageInput"></textarea>
    <div>
        <input type="submit" id="sendButton" value="Send Message" />
        <input type="file" class="inputfile " asp-for="File" />
        <label asp-for="File">Choose a file</label>
    </div>
</form>
0 голосов
/ 05 мая 2020

Вам следует удалить атрибут [FromBody], поскольку данные вашего запроса находятся в форме. [FromBody] обычно используется для обработки данных в теле запроса, таких как JSON и XML

[HttpPost]
public void AddFile(ChatFileViewModel chatFile)
{ ... }

Для получения дополнительных сведений см. Привязка модели .

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