Невозможно отправить тело запроса в конечную точку API в JavaScript fetch () - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь создать основной API asp.net, который получает строковый объект JSON через запрос POST.Чтобы отправить запрос POST этому API, я использую функцию JavaScript fetch().В теле запроса POST я отправляю строковый объект в бэкэнд, но когда бэкэнд получает запрос, значение тела становится пустым!Почему это?

Мой JavaScript пост-звонок:

 function BindSupervisor() { 
                        (() => {
                            const rawResponse = fetch('mu_url', {
                                method: 'POST',
                                headers: {
                                'Accept': 'application/json',
                                'Content-Type': 'application/json'
                                },
                                body: JSON.stringify({aa:'W15'})
                            });
                            const content = rawResponse.json();
                            console.log(content);
                            })();
                     } 

Мой API-интерфейс:

public JsonResult supervisors_name(string aa)
         {
           // My logic
            return Json (supervisors);
        }

Заранее спасибо.

1 Ответ

1 голос
/ 24 июня 2019

Я отправляю строковый объект на сервер, но когда сервер получает запрос, значение тела становится пустым

Это потому, что ваш клиент отправляет полезная нагрузка json, , пока сервер ожидает простая строка :

public JsonResult supervisors_name(<b>string aa</b>)

В результате строка aa всегда равна null.


Как исправить:

Вы можете отправить полезную нагрузку и связать параметр в формате JSON, или вы также можете отправить и привязать полезную нагрузку как в *Формат 1024 *.Но не путайте их.

Подход 1 (в формате Json):

создайте фиктивный Payload класс для хранения свойства aa:

public class Payload {
    public string Aa {get;set;}
}

И измените метод действия так, чтобы он принимал параметр Payload:

[HttpPost]
public JsonResult supervisors_name2(<b>[FromBody]Payload</b> data)
{
    // now you get the data.Aa
    return Json (supervisors);
}

Не забудьте [FromBody], если вы используете контроллер не-API.

Подход 2(формат строки):

Если вы хотите получить тело json в виде простой строки, вам необходимо объявить [FromBody] string aa:

[HttpPost]
public JsonResult supervisors_name(<b>[FromBody]string</b> aa)
{
    // now you get the aa as string
    return Json (supervisors);
}

Клиент должен отправить запрос сзаголовок Content-Type: application/json.

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