У меня есть веб-сервис, написанный на nodejs и разрабатывающий клиент С#. У меня нет проблем с методом GET, но есть проблема с POST.
Вот мой клиентский код
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = methodType.ToString();
UTF8Encoding encoding = new UTF8Encoding();
if (!string.IsNullOrEmpty(content))
{
Byte[] byteArray = encoding.GetBytes(content);
request.ContentLength = byteArray.Length;
using (var dataStream = request.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
}
}
request.ContentType = "application/json";
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
return response;
}
}
.....
и вот мой код сервера
router.post('/api/activation/activate', urlencodedParser, (req, res, next) => {
return new Promise(function (resolve, reject) {
(async function () {
try {
routerAppFeature.Delete(req.body.type.toUpperCase(), req.body.id);
console.info(req.body.HardwareId);
console.info(req.params.HardwareId)
console.info(req.query.HardwareId);
var result = { "data": "Okay :)" + req.body.HardwareId, "errorCode": "-1" };
res.json(result);
} catch (error) {
console.info('!!Error in activate method: ' + error);
return reject(error);
}
})();
}).catch(error => {
var err = { "message": error.message, "errorCode": "1" };
res.json(err);
});
});
так что моя проблема в том, что
после выполнения используя (var dataStream = request.GetRequestStream())
мой метод post запущен, а req.body пуст, потому что я не передаю никаких параметров перед запуском метода.
Как я могу решить эту проблему?
спасибо за ответ @JanithKasun, но это неправда.
Запросы GET используют кодировку URL для передачи параметров, использование urlencodedParser не означает, что вы используете анализатор тела.
@JanithKasun Я использую const bodyParser = require('body-parser'); и я не хочу делать это с GET .. поэтому ищу решение с сообщением.
Не могли бы вы опубликовать код, который вам нужен, и настроить body-parser в качестве промежуточного программного обеспечения?
@JanithKasun нет ничего лишнего .. var urlencodedParser = bodyParser.urlencoded({extended:false}); только это..





Я решил проблему. Я до сих пор не знаю, в чем проблема, но приведенный ниже код работает.
public void Test(string content)
{
using (var client = new HttpClient())
{
try
{
var res = client.PostAsync("http://localhost:4000/api/activation/activate",
new StringContent(content, Encoding.UTF8, "application/json");
res.Result.EnsureSuccessStatusCode();
Console.WriteLine("Response " + res.Result.Content.ReadAsStringAsync().Result +
Environment.NewLine);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
так что это не имеет отношения к nodejs, а к стороне С#.
Похоже, вы не включили парсеры тела для экспресса. Установили ли вы
body-parserили какие-либо другие модули, которые помогают с разбором почтовых запросов?