bullock
@bullock

Как отправить данные с помощью ajax в приложение на asp .net core?

Доброго времени суток. Проблема в том что в приложение не передаются данные из скрипта на js,
вот код скрипта:
$.ajax({
    type: 'POST',
    url: 'Home/MessageHandler',
    data: "Test msg",
    success: function (data) {
        if (data == true) {
            alert("Сообщение доставлено");
            location.reload();
        }
        else {
            alert("Внимание! Сообщение не доставлено!");
        }
    },
    error: function () {
        alert("Произошел сбой");
    }
});


При запуске он переходит в ветку alert("Внимание! Сообщение не доставлено!");

Вот код контроллера который должен обработать сообщение:
[HttpPost]
public JsonResult MessageHandler(string data)
{
    Debug.WriteLine($"\n\nMessageHandler data: {data}\n\n");
    string result = "Сообщение " + data;
    return Json(result);
}

В чем может быть проблема?
  • Вопрос задан
  • 3762 просмотра
Пригласить эксперта
Ответы на вопрос 3
@dmitryKovalskiy
программист средней руки
Ваш POST запрос ждет входного параметра с именем data. Причем не знает откуда его брать.
1) Определитесь откуда будете извлекать данные и после того как определитесь - добавьте к параметру атрибут "FromBody" или "FromUri".

2) Затем правьте код самого запроса в котором отправите Ajax-запрос в котором будет Json объект структуры {'data':value}
Ответ написан
Комментировать
bullock
@bullock Автор вопроса
Решил пробелму переписав контроллер так:

public Object MessageHandler()
    {

        StreamReader sr = new StreamReader(Request.Body);
        string data = sr.ReadToEnd();

        string result = "Сообщение " + data;
        return result;
    }


Скрипт:

$.ajax({
    type: 'POST',
    url: 'Home/MessageHandler',
    data: "Test msg данные тут",
    success: function (data) {
        console.log(data)
    },
    error: function () {
        alert("Произошел сбой");
    }
});


Все работает но я не уверен что все сделал верно.
Ответ написан
NikFaraday
@NikFaraday
Student full-stack Developer
Может немного запоздал с ответом, судя по дате вопроса, но может это поможет новым молодым разработчикам)

1) Экшен (Метод контроллера с возвращаемым значение IActionResult) должен иметь атрибут IgnoryAntiforgetyToken ОБЯЗАТЕЛЬНО, если вы не генерируете его самостоятельно.
2) ajax запрос должен передавать json данный, если вы указываете тип передачи данных json соответственно. Для этого, перед ajax запросом, пропишите что-то типа let jsonData = JSON.stringify("something").
3) Самое главное, url нужно указывать вот так: '@Url.Action("ActionName", "ControllerName")'
4) Методы success и error, если вы пишете там function(response), то вот этот response это локальная переменная, которая показывает сам ответ от сервера. Для получения каких-то данных от сервера, нужно прямо обращаться к той переменной, которую вы передаёте через Json, для примера, если возврат имеет вот такой вид

return Json(new { message = "some message" } ):

Тогда на ajax'е вы должны обращаться к этой message через переменную response, типа вот так:

alert(response.message);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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