2016-04-06 50 views
0

我使用github/fetch polyfill發佈一些數據傳回服務器。ASP.NET MVC - 自動deserialise JSON取POST

fetch('./PerformSearch', { 
    method: 'POST', 
    header: { 
     'Accept' : 'application/json', 
     'Content-type' : 'application/json' 
    }, 
    body: JSON.stringify({ 
     terms: this.refs.termsFilter.getSelections(), 
     details: this.refs.detailsFilter.getSelections(), 
     dateRange: { 
      from: new Date(), 
      til: new Date() 
     } 
    }) 
}) 

但控制器不自動deserialising在參數請求到數據對象的體像它會從表單變量做。如果我雖然做到這一點使用的XmlHttpRequest,它的工作原理..

var request = new XMLHttpRequest(); 
     request.open("POST", url, true); 
     request.setRequestHeader("Content-type","application/json;charset=UTF-8") 
     ... 
     request.send(JSON.stringify(data)) 

功能接收控制器的要求是目前很簡單 - 它沒有做任何事情,我只是想獲得它deseralise JSON的身體數據對象現在使用下列內容:

public JsonResult PerformSearch(SearchModel.SearchSelections data) 
{ 
    //data has not been serialised 
    Stream req = Request.InputStream; 
    string body = new IO.StreamReader(req).ReadToEnd; 

    Console.WriteLine(body); // writes a json string 
} 

所以,是的,我會這樣deserialise自己使用JSON庫裏面的功能,但我寧願找到一個方法讓控制器做它我。

UPDATE:

這裏是我想deseralise的.NET對象:

class SearchModel 
{ 
    public class SearchSelections 
    { 
     public SearchTermList terms { get; set; } 
     public SearchDetailsList details { get; set; } 
     public DateRange dateRange { get; set; } 
    } 

    public class SearchTermList 
    { 
     public IEnumerable<string> exams { get; set; } 
     public IEnumerable<string> areas { get; set; } 
     public IEnumerable<string> classes { get; set; } 
     public IEnumerable<string> tokens { get; set; } 
    } 

    public class SearchDetailsList 
    { 
     public IEnumerable<string> studyTypes { get; set; } 
     public IEnumerable<string> species { get; set; } 
     public IEnumerable<string> strains { get; set; } 
    } 

    public class DateRange 
    { 
     public System.DateTime @from { get; set; } 
     public System.DateTime til { get; set; } 
    } 

} 
+0

你確定您的SearchModel.SearchSelections模型是否與您傳輸到服務器的JSON模型相對應? – Anton

+0

是的,如果你喜歡,我可以將它們添加到問題中? –

+0

是,請添加它 – Anton

回答

0

愚蠢的錯誤:

header: {'Content-type' : 'application/json'} 

應該已經headers

headers: {'Content-type' : 'application/json'}