2014-09-26 108 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

相關問題