我正在为公司内部网上的内容制作区域创建UI。我在之前的项目中创建了中间件API。这是我第一次使用RESTful方法(首先我对Javascript和jquery相当新)
当我从jquery.ajax调用我的调试本地api时,JSON对象没有在我的GET方法上正确传递。
在C#API中
[ActionName("THING")]
[HttpGet()]
public string GetThing(object json)
{
GetData getData;
if (json == null)
return null;
else if (json is string && (json as string).StartsWith("{"))
getData = JsonConvert.DeserializeObject<GetData>(json as string);
else
return null;
ItemReturn retVAl = new ItemReturn();
[logic to use JSON]
return retVal;
在网页
中loadThings: function (thingNumber, showBool) {
showBool = (showBool === true);
$.ajax({
type: "GET",
dataType: "json",
data: '{ "GetData" : {"ThingNumber":"' + thingNumber + '","Show": ' + showBool + '}}',
url: "http://localhost:11422/api/THING/THING/GetThing",
contentType: "application/json; charset=utf-8",
success: function (result) {
[logic to display things]
}
我可以在GetThing中点击我的breakPoint,让它全部正常工作,但我似乎无法弄清楚为什么我的重载中的对象(json)是null。我知道它是javascript中的东西,我的单元测试工作正常,我的JavaScript让我到了方法中的断点,我只需要重载JSON对象实际传入
更新
它在api方面。我将GetThing的重载从(对象json)更改为([FromUri()]对象json)。这解决了直接问题,但它目前只是将JSON对象转换为空白对象
++注意:我必须将我的post方法重载更改为[FromBody()]而不是[FromUri()],我还没有更新DELETE方法以查看使用哪个
答案 0 :(得分:0)
您可以尝试添加ajax设置:traditional:true,
吗?
答案 1 :(得分:0)
问题1,你不能用GET
做到这一点。两个选项
修复您的ajax请求,如下所示:
$.ajax({
type: "POST",
dataType: "json",
data: { "GetData" : {"ThingNumber": thingNumber ,"Show": showBool }}, // JS object not string
url: "http://localhost:11422/api/THING/THING/GetThing",
contentType: "application/json; charset=utf-8",
请阅读$.ajax
帖子文档,了解相关说明https://api.jquery.com/jquery.post/
var obj = JSON.stringify({ "GetData" : {"ThingNumber": thingNumber ,"Show": showBool }}),
url = "http://localhost:11422/api/THING/THING/GetThing?json=" + encodeURIComponent(obj);
$.ajax({
type: "GET",
dataType: "json",
url: url, // Here we encode the obj for server
contentType: "application/json; charset=utf-8",
如果使用此方法,则必须更改控制器以将json
参数作为String
,然后使用您选择的库将其解析为JSON。 How can I parse JSON with C#?