Ваше действие контроллера ожидает POST-запрос, но вы пытаетесь отправить запрос «SendMessages», который не является допустимым глаголом HTTP. Укажите POST в настройках:
$.ajax({
url: "/api/messages/" + button.attr("data-message-id"),
method: "POST",
success: function (data) {
}
});
Вы также можете использовать .data()
, чтобы лучше получить значение атрибута data- *:
$.ajax({
url: "/api/messages/" + button.data("message-id"),
method: "POST",
success: function (data) {
}
});
Кроме того, правильно ли ваш URL? Разве это не должно включать название действия? И настроены ли ваши маршруты для автоматического заполнения MessageID, или вам нужно установить его вручную?:
$.ajax({
url: "/api/messages/SendMessage?MessageID" + button.data("message-id"),
method: "POST",
success: function (data) {
}
});
<ч />
Если вы хотите, вы также можете использовать серверный помощник для генерации вашего URL. Поскольку это запрос POST, вы можете поместить значения в запрос, а не в URL. Примерно так:
$.ajax({
url: "/api/messages/SendMessage",
method: "POST",
data: {
MessageID: button.data("message-id")
},
success: function (data) {
}
});
Таким образом, вы можете легко добавить столько свойств к этому data
объекту, сколько захотите.
Редактировать: Возможно , что вы можете столкнуться здесь с проблемами привязки модели, и это может зависеть от версии Web API. (Честно говоря, я не уверен.) Но иногда он видит этот объект JavaScript как один параметр со свойствами, а не как отдельные параметры.
В этом случае создайте модель на стороне сервера:
public class Message
{
public int MessageID { get; set; }
public string MessageReply { get; set; }
}
И используйте его на метод действия:
public IHttpActionResult SendMessages([FromBody]Message message)
Это должно более эффективно связать входящий JSON с параметром метода.