Работая над небольшой задачей, у меня возникли проблемы с контроллером веб-API.
В моем API есть 2 метода:
[HttpGet]
public IHttpActionResult FetchAll()
[HttpPost]
public IHttpActionResult CreateNew(int? taskType, string taskName = null)
Который я использую для управления задачами в db. 1-й (FetchAll) отлично работает как из специальных утилит типа Postman, так и выводит какие-то результаты в консоль браузера.
Но! Если использовать второй (CreateNew), возникают некоторые проблемы.
Как я тестировал в Postman, он отлично работает:
Но если использовать мою интерфейсную часть приложения (JS):
var App = function () {
this.init();
};
App.prototype.init = function () {
var self = this;
$.post(
'/api/task/createNew',
{ taskName: "smth new", taskType: 0 }
);
$.get(
'/api/task/fetchAll',
function ( sender ) {
console.log(sender);
}
);
};
window.onload = function () {
var app = new App();
};
Проблема с методом POST. Во-первых, я думаю, что использую jQuery неправильно, но, читая следующие ссылки, я понимаю, что все правильно с использованием jQuery:
Также я проверил в браузере детали неудачного запроса:
Как вы можете видеть, данные POST были переданы правильно при использовании jQuery, но я также допускаю одну деталь: it's form data
.
Итак... Данные формы - это тип данных, которые отправляются с application/x-www-form-urlencoded
и не представлены как часть URL.
Если использовать в JS-части следующий код:
$.post( '/api/task/createNew?taskName=smth new&taskType=0' );
Все начинает работать.
А Web API, похоже, не поддерживает операции с данными Forms
, и поэтому тест Postman работает хорошо (если еще раз посмотреть на старый скриншот), потому что он использует параметры URL, а не формирует их.
Но я думаю, что отправлять данные POST с использованием параметров URL довольно некрасиво, как для архитектуры REST, так и для использования их в коде JavaScript (вы будете генерировать строку, а не обычно использовать Object
представление для данных, что может быть рассмотрено как плохая OO-структура ).
Я прочитал об обработке форм в WebAPI здесь: Есть ли способ обрабатывать данные сообщений формы в контроллере Web Api?
Итак, существуют ли какие-то способы решить мою проблему с более красивым стилем кода и т. Д. (Это означает, что не нужно генерировать строки URL и т. Д.)?
ПС
Файлы проектов, которые были описаны здесь, доступны:
- Контроллер C#/WebAPI: http://pastebin.com/AeE2Lb2a
- Часть JS: http://pastebin.com/XcBPs6SD