Unsupported media type 415 при отправке fetch запроса в ApiController
Фетч возвращает 415, при этом подозрительно быстро и без срабатывания брекпоинтов даже в начале метода. У меня есть ApiController
[Route("api")]
[ApiController]
public class SiteApiController : ControllerBase
{
//
}
Есть апи метод (два нижних атрибута уже потом добавил после гуглений)
[HttpPost("find")]
[AllowAnonymous]
[Consumes("application/json")]
public HttpResponseMessage Find([FromBody] JsonElement search)
{
// тут код, но с фетчем не срабатывает даже брекпоминт на первой строчке
}
Есть JS с фетчем в разметке
const req = {
method: "POST",
headers: {
"Accept": "application/json, text/plain",
},
body: JSON.stringify(`{'search':'${text}'}`)
};
fetch("/api/find", req)
.then(res => {
console.log("then -> " + res.text());
return res.json();
})
.then(json => {
console.log("then -> " + json);
})
.catch(err => {
console.log(err);
});
}
Сам Program
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapControllerRoute(
name: "api",
pattern: "api/{action}");
Самое смешное. что через PostMan все отправляется. Уже весь интернет облазил, не понимаю ничего (
Ответы (1 шт):
Атрибут [Consumes("application/json")] можно убрать, если это не отдельный случай в вашей программе. Иными словами, если у вас API работает с json, то такие вещи настраиваются в конфигурации, а не отдельно для каждого контроллера
ContentType для fetch запроса измените на application/json; charset=utf-8
Ошибка, скорее всего связанна с тем, что эндпоинт принимает объект JsonElement, а вы отправляете строку в виде {'search':'${text}'}. Попробуйте отправить тело запроса в формате объекта без использования символов `