JSON не сопоставлен с классом - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть приложение asp.net core 3.0 с веб-страницами, и я пытаюсь отправить JSON через ajax своему обработчику.Но параметр всегда нулевой или просто заполнен значениями по умолчанию.Я пытался, если строка JSON из поста разбирается и работает, когда я разбираю вручную.

Это мой контроллер:

    public void OnPost([FromBody]FilterModel filter)
    {
        Console.Write(filter);
    }

Это класс модели:

public class FilterModel
{
    public DateTime TimeRangeFrom { get; set; }
    public DateTime TimeRangeTo { get; set; }

    public int CustomerId { get; set; }
}

Ajax-запрос:

                    $.ajax({
                        url: "/CustomerOverview/Test",
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        data: JSON.stringify({
                            CustomerId: customerId,
                            TimeRangeFrom: picker.startDate,
                            TimeRangeTo: picker.endDate
                        }),
                        beforeSend: function(xhr) {
                            xhr.setRequestHeader("XSRF-TOKEN",
                                $('input:hidden[name="__RequestVerificationToken"]').val());
                        },
                        success: function(response) {
                            button.hide();
                        },
                        failure: function(response) {
                            alert(response);
                        }
                    });

И JSON, вошедшие в Chrome Dev Tools:

{CustomerId: "1", TimeRangeFrom: "2019-08-26T22:00:00.000Z", TimeRangeTo: "2019-09-25T21:59:59.999Z"}

Нужно ли настраивать отображение или что-то еще?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Оказывается, что он не может преобразовать «1» в int.Мне пришлось сначала преобразовать значение для customerId в int, чтобы у меня был этот JSON:

{
    "CustomerId": 1, 
    "TimeRangeFrom": "2019-08-26T22:00:00.000Z",
    "TimeRangeTo": "2019-09-25T21:59:59.999Z"
}
0 голосов
/ 26 сентября 2019
Атрибут

FromBody будет анализировать модель по умолчанию, который в большинстве случаев отправляется типом содержимого application/json из тела запроса. Поэтому, если вы заполняете форму и передаете данные формы в действие контроллера, вам нужнопреобразовать объект JavaScript в строку с атрибутом JSON.stringify().

FromForm для входящих данных из отправленной формы, отправленной типом содержимого application / x-www-url-formencoded.

Справка: https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-3.0#sources

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