Реагируйте: Fetch API получает 415 неподдерживаемых типов носителей, используя POST - PullRequest
1 голос
/ 11 апреля 2019

Я пытаюсь сохранить свои данные, вызывая свой собственный API с помощью Fetch API. Но затем результат продолжает возвращаться 415 Unsupported Media Type.

Клиентская сторона использует React JS с .NET Core MVC. На стороне сервера используется .NET Core Web API, размещенный на Windows Server 2012.

Я перепробовал все решения, представленные в сети, но потом все равно получаю ошибку 415. На стороне IIS я добавил Content-Type и Accept, чтобы принять application/json и text/plain.

Пока работает только метод GET. PUT, POST, DELETE - все не работает.

Ниже мой код на стороне клиента.

        fetch('https://mywebapi.net/api/event/', {
            method: 'POST',
            headers: {
                'Accept': 'application/json, text/plain',
                'Content-Type': 'application/json;charset=UTF-8'
            },
            mode: 'no-cors',
            body: JSON.stringify({
                eventId: 5,
                eventName: "Event 5",
                eventDescription: "Event 5 Description",
                eventLocation: "Kuala Lumpur, Malaysia",
                eventDateTime: "2019-03-28"
            }),
        }).then(response => response.text())
            .then(data => console.log(data))    
            .catch(error => console.log("Error detected: " + error))

Если я удалю mode: 'no-cors', вместо этого будет возвращено 500 Internal Server Error.

Я пытался использовать .NET, используя RestSharp, и он мог POST нормально, но не в ReactJS. Поэтому я предположил, что конфигурация на стороне сервера должна быть правильной, но не на стороне клиента.

1 Ответ

0 голосов
/ 11 апреля 2019
fetch('https://mywebapi.net/api/event/', {
            method: 'POST',
            headers: {
                'Accept': 'application/json, text/plain',
                'Content-Type': 'application/json;charset=UTF-8'
            },
            mode: 'no-cors',
            body: {
                "eventId": 5,
                "eventName": "Event 5",
                "eventDescription": "Event 5 Description",
                "eventLocation": "Kuala Lumpur, Malaysia",
                "eventDateTime": "2019-03-28"
            },
        }).then(response => response.text())
            .then(data => console.log(data))    
            .catch(error => console.log("Error detected: " + error))

попробуйте без строкового JSON объекта, так как он преобразует его в строку , которую вы можете отправить сам JSON объект без преобразования его в строку. Кстати, я думаю, что вам не нужно включать CORS с каждым запросом , если мы прокси запросы в приложении реагировать. Вы можете включить прокси, добавив эту строку в файл package.json.

 ,
  "proxy": "http://localhost:5000"

при условии, что ваш бэкэнд работает на localhost и на порту 5000.

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