@Bibort

Как из JS функции отправить POST запрос к web api ASP.NET?

Добрый день!

Хочуразобраться с web api в dotnet, в качестве примера делаю простой блог в MVC с комментариями, которые подгружаются и отправляются через веб апи.

Вот какая трудность: мой контроллер не желает принимать json из js запроса, и, в зависимости от типа аргумента контроллера, я получаю разные ошибки в консоли браузера: 500, 400 и 415.
Если не в браузере, то получаю null в аргументе, обычно, если аргумент принимает string. Подскажите, в какую сторону копать?

Модель:
public class CommentModel
{
    public int PostId;
    public string AuthorName { get; set; }
    public string CommentContent { get; set; }
}


Контроллер и методы, которые я по очереди использовал:
[ApiController]
[Route("[controller]")]
public class CommentsApiController : ControllerBase
{
        [HttpPost]
        public async Task<string> Post(string model){...} 

        [HttpPost]
        public async Task<string> Post(CommentModel model){...} 

        [HttpPost]
        public async Task<string> Post(JObject model){...} 

        [HttpPost]
        public async Task<string> Post(dynamic model){...} 
}


Также, я добавлял к аргументам атрибуты [FromForm], [FromServices], [FromBody] и т.д., всё то же самое.

JS:
const url = '/CommentsApi';
const comment = function () {
    var data = {
        PostId: document.getElementById("PostId").innerText,
        AuthorName: document.getElementById("AuthorName").value,
        CommentContent: document.getElementById("CommentContent").value
    }
    console.log(data);
    return data;
};

async function postComment() {
    await fetch(url, {
        method: "POST",
        headers: { 'Content-type': 'application/json' },
        body: comment()
    }).then(r => r.json()).then(res => {
        if (res) {
            console.log(res);
        }
        else {
            console.log("Fail");
        }
    });
};


Спасибо!
  • Вопрос задан
  • 514 просмотров
Решения вопроса 1
@Bibort Автор вопроса
Разобрался. Нужен метод с моделью в контроллере:
public async Task<string> Post(CommentModel model){...}

А в JS нужно обернуть данные в json явно:
body: JSON.stringify(comment())
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы