Не удается отправить JSON в обработчик RazorPage ASP.NET Core

Я работаю с ASP.NET Core RazorPage в качестве альтернативы контроллеру MVC, и я хочу иметь возможность отправлять форму на стороне клиента через XMLHttpRequest. Я уже выяснил биты токена XSRF, чтобы пройти проверку, но структура RazorPages, похоже, не обрабатывает входящие полезные данные JSON и не привязывает их к свойству, как ожидалось.

Некоторый код:

Модель страницы (.cshtml.cs):

public class IndexModel : PageModel
{
    private Database database;
    private ILogger logger;

    [BindProperty]
    public AddRequestModel MyRequest { get; set; }

    public IndexModel(Database database, ILogger<IndexModel> logger)
    {
        this.database = database;
        this.logger = logger;
    }

    public void OnGet() {}

    public IActionResult OnPostValidate()
    {
        if (ModelState.IsValid)
        {
            // ...
        }

        return new BadRequestObjectResult(ModelState);
    }

    public async Task<IActionResult> OnPutConfirmAsync()
    {
        // ...
    }
}

И сообщение на стороне клиента:

const url = "?handler=validate";
const data = { MyRequest: this.fields };
await axios.post(url, data);

Я убедился, что данные отправляются правильно:

введите здесь описание изображения

Этот заголовок X-XSRF-TOKEN добавляется axios перед отправкой запроса. Тот факт, что сервер отвечает списком ошибок, указывает на то, что проблема не в токене XSRF:

введите здесь описание изображения

Обратите внимание, что объект MyRequest не содержит значений из полезной нагрузки запроса - он не был привязан должным образом (в противном случае FirstName не вернул бы требуемую ошибку). Как я могу сказать RazorPages принять запрос JSON и привязать его к моему свойству?


person Chris    schedule 12.12.2017    source источник
comment
Когда-нибудь это работало?   -  person Aron Einhorn    schedule 29.08.2018


Ответы (3)


Используйте параметры urlsearchparams с данными формы.

В этом сообщении вы можете найти дополнительную информацию Как разместить данные формы с API получения?

person julian zapata    schedule 21.03.2019

Я смог заставить работать привязку, добавив FromBody, аналогично тому, как это работало для веб-API ASP.NET 2.

    [BindProperty, FromBody]
    public BroadcastMessageEditingViewModel BindingInfo { get; set; }
person Luke Vo    schedule 31.08.2019

Лучше публиковать данные в конечной точке API, а не в контроллере страницы. Создайте класс из ControllerBase, и он будет правильно обрабатывать вашу публикацию JSON.

person Jeff S    schedule 18.01.2019
comment
Это может быть так, но это был эксперимент, и ему больше года. Stackoverflow предназначен для ответов на вопросы, а не для перехода к альтернативам. - person Chris; 18.01.2019