我向我的控制器发布了一个带有本机JavaScript的XmlRequest
,但它不接受请求体作为参数。即,即使参数是字符串,它也会将其读取为null
。
请求:
request.open("POST", "https://localhost:44328/CommodityTypes/PostData");
//request.setRequestHeader('Content-type', 'text'); // maybe that makes the problem?
request.send("Message");
控制器:
[HttpPost]
public string PostData(string Text)
{
return JsonSerializer.Serialize(Text);
}
很乐意得到任何建议。
在深入了解我发现的业务后,可以将"object"指定为要解析的参数('[FromBody]'属性保留(,获得一个奇怪的对象,该对象给出调用ToString((方法的JSON消息。如果传入JSON的结构可变或不均匀,可以使用此方法。
尽管一定有其他的方式来处理这个问题。
您可以创建对象data = { "text": "YourText" }
并发送JSON.stringify(data)
并且需要设置标题xmlhttp.setRequestHeader('Content-Type', 'application/json');
var uri = '/CommodityTypes/PostData';
var xmlhttp;
xmlhttp = new XMLHttpRequest();
var data = { "text": "YourText" };
var sendstr = JSON.stringify(data);
xmlhttp.open("POST", uri, true);
xmlhttp.setRequestHeader('Content-Type', 'application/json');
xmlhttp.send(sendstr);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
alert(xmlhttp.responseText);
}
在POST中,您必须将Text参数作为FormData发送,以便通过方法识别和映射
var data = new FormData();
data.append("Text", "test");
var xhr = new XMLHttpRequest();
xhr.addEventListener("readystatechange", function() {
if(this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://localhost:44328/CommodityTypes/PostData");
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(data);