Публикация данных из pi в службу MVC restful service
У меня есть веб-приложение MVC5 Web Api, в которое я пытаюсь отправить данные датчиков.
Мой контроллер;
[HttpGet] [Route("api/Sensor/GetByTopic")] public IHttpActionResult GetByTopic(string name) { string url = "getByTopic/" + name; List<SensorData> svn = GetData(url); return Ok(svn); } [AcceptVerbs("POST", "GET")] [HttpPost] [Route("api/Sensor/addRow")] public IHttpActionResult addRow([FromBody]string data) { TagCollectionRepository.AddTag(data); return Ok(); }
а на пи у меня есть очень простой узел.JS-приложение для получения и публикации данных. GET работает нормально, но почта дает мне проблемы. Контроллер получает запрос, но параметр data всегда равен нулю, поэтому я думаю, что отправляю данные тела неправильно в приложении Pi.
Код Пи;
var request = require('request-promise') var exp = require('express') var app = exp(); const opts = { method: 'GET', url: 'http://www.jaxcoder.com/api/Sensor/getAll' } //This call works fine request(opts){ .then(function(res) { console.log('res); }) .catch(function(err) { console.log('err: ', err); }); const options = { headers: { 'content-type' : 'application/x-www-form-urlencoded' }, method: 'POST', url: 'http://jaxcoder.com/api/Sensor/addRow', form: { data: 'From Pi' } } request(options) .than(function(res) { console.log('resp: ', res); }) .catch(function(err) { console.log('err: ', err); }); app.get('/', (req, res) => res.send('hello')); app.listen(3000);
[обновление]
Когда я создавал метод addRow, я просто вставил строковый параметр, чтобы посмотреть, смогу ли я общаться с Pi в моей службе Web Api. Ну, оказывается, что в Web Api сложные значения просты, но захват необработанных данных тела запроса-нет.
Таким образом, решение состояло в том, чтобы добавить класс модели представления;
public class StringViewModel { public string data { get; set; } }
затем измените метод addRow, чтобы отразить изменения.
Я нашел ответ в посте Рика Страла Принятие сырого содержимого тела запроса с помощью ASP.NET веб-API
[^]
[/обновление]
Что я уже пробовал:
Я пробовал различные варианты для поста, который я нашел в гугле, например, используя body вместо form с опцией "json: true o", оставляя опцию headers, но ничего не сработало, и я в тупике.