Как ajax пост обработчик страницы бритвы? - PullRequest
0 голосов
/ 22 марта 2019

Код выглядит следующим образом

HTML:

    <form class="col-sm-6" name="log" >
       <div class="form-group row">
                    <label class="col-sm-3 col-form-label"></label>
                    <div class="col-sm-7">
                        <input name='logText' class="form-control">
                    </div>
                </div>    
                <div class="form-group row">
                    <div class="col-sm-7 offset-sm-3">
                        <button class="btn btn-primary" id="submit">Submit</button>
                    </div>
                </div>

            </form>

Javascript:

        document.forms['log'].onsubmit = () => {

            let formData = new FormData(document.forms['log']);
            fetch('?handler=log', {
                method: 'post',
                body: new URLSearchParams(formData)
            })
                .then(() => {
                    alert('Posted using Fetch');
                });
            return false;
        };
    </script>

C #:

    public void OnPostLog(string logText)
    {

    }

Пост Ajaxвыполняет запрос, который выглядит следующим образом

Request URL: https://localhost:44345/?handler=log
Request Method: POST
Status Code: 400 
Remote Address: [::1]:44345
Referrer Policy: no-referrer-when-downgrade

Однако сервер возвращает 400. Ajax get работает нормально.Полный пост пост к обработчику работает нормально.Просто не пост Ajax для обработчика.Поддерживается ли эта возможность даже в Razor Pages?

Ответы [ 2 ]

0 голосов
/ 23 марта 2019

Причина в том, что в форму встроен __RequestVerificationToken.и это должно быть предоставлено во время сообщения Ajax.Но для того, чтобы токен был добавлен в форму, вы должны добавить в форму method = "post" нижеприведенное.

        <form class="col-sm-6" name="log" method="post" >

Источник: https://www.talkingdotnet.com/handle-ajax-requests-in-asp-net-core-razor-pages/

0 голосов
/ 22 марта 2019

Всякий раз, когда я использую API выборки, я использую объект FormData в качестве тела для запроса вместо создания нового объекта URLSearchParams.

Надеюсь, это поможет.

...