2014-09-26 107 views
0

我想测试我的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调用发送的数据。

如果有人可以帮忙,将不胜感激!

回答

0

好吧,我找到了我的快乐的地方!

下面的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的”。

谢谢大家的帮助。我希望这有助于下一个遇到这个问题的可怜的灵魂!

0

我认为你需要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。可能是一些错误的命名:)

+0

我试过了JSON.stringify(),但得到了相同的结果,所以我想我会在这里尝试.parse()方法。仍然没有快乐。 – user2900166 2014-09-26 23:10:37

+0

尝试使用无内容类型:仍为null。 – user2900166 2014-09-26 23:55:25

+0

尝试使用content-type:application/json并且仍为null。 – user2900166 2014-09-26 23:55:51

0

“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]

+0

是的,数据已经是json。我已经尝试了应用程序/ json和application/x-www-form-urlencoded,但都没有运气。我也尝试过,没有指定内容类型。 – user2900166 2014-09-26 23:58:03

相关问题