Как исправить ошибку «Bad Request (400)» при размещении полезной нагрузки JSON в ASP.NET Core? - PullRequest
0 голосов
/ 15 мая 2019

Я разрабатываю страницу бритвы, которая реализует именованный метод обработчика. Я публикую некоторые JSON-данные в именованном методе-обработчике. Однако в ответ я получаю 400 неверных запросов.

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

Вот пример моего метода:

        [HttpPost]
        public IActionResult OnPostContextFreeGrammarPartial() {
            var grammarModel = new ContextFreeGrammarModel();

            return new PartialViewResult() {
                ViewName = "_ContextFreeGrammar",
                ViewData = new ViewDataDictionary<ContextFreeGrammarModel>(ViewData, grammarModel)
            };
        }

А вот пример запроса:

The sent HTTP request

Я ожидаю, что метод-обработчик будет успешно выполнен, но вместо этого сервер или браузер просто выдают ответ 400, прежде чем метод даже начнет выполняться.

Что мне не хватает?

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Вы должны передать данные в OnPostContextFreeGrammarPartial, и я думаю, grammarModel является нулевым! Попробуйте это, я думаю, это полезно здесь

    [HttpPost]
[AutoValidateAntiforgeryToken]
        public IActionResult OnPostContextFreeGrammarPartial([FromBody]ContextFreeGrammarModel item) 
        {
            var grammarModel = new ContextFreeGrammarModel();

            return new PartialViewResult() {
                ViewName = "_ContextFreeGrammar",
                ViewData = new ViewDataDictionary<ContextFreeGrammarModel>(ViewData, grammarModel)
            };
        }

А также в startup.cs:

services.AddMvc(options =>
        {
            options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
        });
0 голосов
/ 15 мая 2019

Комментарий Криса Пратта объясняет проблему.В заголовке запроса отсутствовал маркер защиты от подделки, который необходим для публикации запросов на страницах Razor.

Он также предложил использовать контроллер вместо страницы Razor.

EDIT

Добавление фильтра IgnoreAntiforgeryToken к службам во время запуска также устранило проблему.

            services.AddMvc()
                .AddRazorPagesOptions(options => {
                    options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
                }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...