我将发布请求从.NET应用程序发送到节点REST api,其控制器名为“createPdf”
用于发送帖子请求的.NET代码似乎工作正常,我使用SerializeObject创建一个json对象,然后使用UrlEncode对json进行编码,然后在post请求中将其发送出去。
Dim postjson As String = JsonConvert.SerializeObject(article)
Dim request As WebRequest = WebRequest.Create("url")
request.Method = "POST"
Dim postData As String = WebUtility.UrlEncode(postjson)
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
request.ContentType = "application/x-www-form-urlencoded"
//go off and send the post request
这似乎以这种格式生成有效的json -
{
"source": "le sauce",
"subTopic": "le subtopic",
"Title": "le title",
"Body": "le body",
"refs": "le refs",
"lastUpdated": "19/12/2016 11:23:56"
}
但是当我发送json并尝试用我的节点控制器中的下面的代码解析json时,它似乎在json中添加了额外的括号和冒号。
节点控制器
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
var fs = require("fs");
var wkhtmltopdf = require('wkhtmltopdf');
router.use(bodyParser.urlencoded({ extended: true }));
router.post('/', function(req, res) {
console.log(req.body);
res.status(200).send('lol');
});
module.exports = router;
这是从console.log(req.body)
输出的无效json{ '{
"source”:”le sauce“,
”subTopic”:”le subtopic“,
”Title”:”le title“,
”Body”:”le body“,
”refs”:”le refs“,
”lastUpdated":"19/12/2016 11:23:56"
}': '' }
由于某些原因,在某些时候将额外的括号,冒号,引号等添加到json并使json无效,我很确定它不会发生在.NET端,并且必须在Node尝试处理时发生发布请求,但我无法弄清楚在哪里。
关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
如果您要发送JSON,那么这是不正确的:
request.ContentType = "application/x-www-form-urlencoded"
就像在服务器端这样:
router.use(bodyParser.urlencoded({ extended: true }));
很清楚地说,你发送了URI编码的表单数据,而不是JSON,并告诉body-parser
解码URI编码的表单数据,而不是JSON。
发送正确的内容类型:
request.ContentType = "application/json"
...并使用正确的解析器:
router.use(bodyParser.json());
(请注意,如果您的端点需要URI编码的表单数据,而其他端点需要JSON,则可以使用多个解析器; body-parser
将从内容类型中找出它。)
答案 1 :(得分:0)
将您的内容类型设置为application/json
。由于您尝试发送JSON但实际上发送了url编码数据,因此Node无法正确解码。然后,尝试以下代码:
Dim httpWebRequest As HttpWebRequest =
(HttpWebRequest)WebRequest.Create("http://url")
httpWebRequest.ContentType = "application/json"
httpWebRequest.Method = "POST"
Dim streamWriter As StreamWriter = new StreamWriter
(httpWebRequest.GetRequestStream ())
Dim jsonData As String = "{'source':'lesauce','subTopic':'lesubtopic','Title':'letitle','Body':'lebody','refs':'lerefs','lastUpdated':'19/12/201611:23:56'}"
streamWriter.Write (jsonData)
streamWriter.Close ()
Get Response here