Mike Hankey Ответов: 0

Публикация данных из 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, но ничего не сработало, и я в тупике.

0 Ответов