为什么我的ASP API中的json对象为空?
我想测试我的ASP API。为什么我的ASP API中的json对象为空?
其中一个端点需要从浏览器中获取json对象。为了测试这个,我将一个json对象放入一个文本字段,然后对我的api进行一次ajax调用。当api被击中时,json对象始终为空。
我检查了这个帖子:how to pass json post data to web api method as object,这并没有解决我的问题。
这是我的目标:
{ "userName": "063bcdf2-36fd-4b8c-a5af-808da63744f6",
"password" : "Password"
}
这里是我的Ajax调用:
var submission = function() {
var url = urlBase + "/api/Submission/";
var testdata = $("input[name=submission]").val();
alert(testdata);
$.ajax(url, {
type: "POST",
data: JSON.parse(testdata),
contentType: 'application/x-www-form-urlencoded'
}).always(showResponse)
return false;
};
这里是我的API:
[HttpPost]
[ResponseType(typeof(SubmissionOutputModel))]
public IHttpActionResult POST([FromBody]SubmissionInputModel submission)
{
if (ModelState.IsValid)
{
SubmissionService service = new SubmissionService();
return Json(service.Submit(submission));
}
else
{
return BadRequest("Invalid Model State");
}
}
SubmissionInputModel:
public class SubmissionInputModel
{
[Required]
public string userName { get; set; }
[Required]
public string password { get; set; }
}
ajax中的警报向我显示数据正在发送,并且在调试模式下,api被击中,但提交对象未设置为从ajax调用发送的数据。
如果有人可以帮忙,将不胜感激!
好吧,我找到了我的快乐的地方!
下面的AJAX调用最后通过的API获得了数据:
var submission = function() {
var url = urlBase + "/api/Submission/";
var testdata = $("input[name=submission]").val();
alert(testdata);
$.ajax(url, {
type: "POST",
data: testdata,
contentType: 'application/json'
}).always(showResponse)
return false;
};
注意到有关于在呼叫中的数据没有JSON方法和的contentType是“应用/ JSON的”。
谢谢大家的帮助。我希望这有助于下一个遇到这个问题的可怜的灵魂!
我认为你需要JSON.stringify而不是解析,因为如果使用其他方式解析。 JSON.parse接受一个字符串并将其转换为JSON对象。
尝试字符串化的TESTDATA
$.ajax(url, {
type: "POST",
data: JSON.Stringify(testdata),
contentType: 'application/x-www-form-urlencoded'
}).always(showResponse)
return false;
};
如果不工作,从AJAX调用漏下的contentType,或者写的contentType: “应用/ JSON” 代替。
并且还发布您的SubmissionInputModel。可能是一些错误的命名:)
“testdata”是什么样的?它是JSON格式的字符串吗?
1. JSON.Parse解析字符串作为JSON只,例如:
JSON.parse('{}'); // {}
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
2,内容类型应该应用/ JSON在你的情况,你现在指定的值是默认值:
contentType: 'application/json'
3.At的平均时间,因为你的行动已经被标记为[POST]
所以ModelBinder的会尽量模型请求主体绑定,所以没有必要指定为[FromBody]
。
是的,数据已经是json。我已经尝试了应用程序/ json和application/x-www-form-urlencoded,但都没有运气。我也尝试过,没有指定内容类型。 – user2900166 2014-09-26 23:58:03
我试过了JSON.stringify(),但得到了相同的结果,所以我想我会在这里尝试.parse()方法。仍然没有快乐。 – user2900166 2014-09-26 23:10:37
尝试使用无内容类型:仍为null。 – user2900166 2014-09-26 23:55:25
尝试使用content-type:application/json并且仍为null。 – user2900166 2014-09-26 23:55:51