向 5 WEB API 发送数据为简单字符串的 AJAX 帖子时出现问题 ASP.NET
本文关键字:AJAX NET ASP 问题 字符串 API WEB 简单 数据 | 更新日期: 2023-09-27 18:31:07
我的目标是向 5 web api 方法发送一个字符串并 asp.net 然后让该方法简单地返回一个字符串作为结果。
这是我的js:
$("#btnChangeName").click(function() {
var prodName = $("#txtProductName").val();
var url = 'http://localhost:27081/api/products/changename';
$.ajax({
url: url,
type: 'POST',
dataType: 'text',
data: JSON.stringify({name: prodName}),
success: successFuncApi,
error: function(xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
});
控制器:
[HttpPost]
[Route("/api/functions/changename")]
public string ChangeName([FromBody]dynamic value)
{
string newName = ChangeNameHelper(value.name.ToString());
return newName;
}
最奇怪的是,当我使用邮递员或小提琴手并在原始正文中发送类似的东西时:
{"name":"John"}
它工作完全正常。为什么它不适用于 AJAX 请求?我的动态参数最终为空。
是否 100% 要求始终绑定到新 Web API 中的模型?在这种情况下,我只处理一个简单的字符串输入和一个简单的字符串输出。
您需要
使用 JSON.stringify
序列化数据。
因此,请尝试替换此内容:
data: {name: name}
有了这个:
data: JSON.stringify({name: name})
JSON可用于现代浏览器。但是,如果您需要支持 IE8,或者您的浏览器不支持它,则需要包含 json2
更新
@Blake,这是我对您的评论的回应:它太长了,无法放在评论部分。
我以前没有使用dynamic
将复杂类型接收到我的 Web API 中。但是,我使用了JToken
.然后,您可以像这样访问name
属性:
public string ChangeName([FromBody]JToken jsonbody)
{
var name = jsonbody.Value<string>("name");
...
}
您无需创建对象即可发送字符串。这将起作用。
[HttpPost]
[Route("/api/functions/changename")]
public string ChangeName([FromBody]string value)
{
string newName = ChangeNameHelper(value=);
return newName;
}
诀窍是发送 JSON 字符串,而不仅仅是字符串。它们是不一样的。
$("#btnChangeName").click(function() {
var prodName = $("#txtProductName").val();
var url = 'http://localhost:27081/api/products/changename';
$.ajax({
url: url,
type: 'POST',
dataType: 'text',
contentType:'application/json',
data: JSON.stringify(prodName),
success: successFuncApi,
error: function(xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
});