2016-04-06 52 views
0

getir. Bu şekilde değişkenlerden yapacağını gibiASP.NET MVC - Otomatik olarak JSON deserialise geri sunucuya bazı veri göndermek için <a href="https://github.com/github/fetch" rel="nofollow">github/fetch polyfill</a> kullanıyorum 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() 
     } 
    }) 
}) 

ancak kontrol cihazı otomatik olarak değişken veri nesnesine isteğe gövdesini deserialising değildir. Gerçi bu kullanarak XmlHttpRequest yaparsanız, çalışıyor ..

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

denetleyicisi isteği alma fonksiyonu şu anda oldukça basittir - bu şey yapmaz, sadece o deseralise almaya çalışıyorum veri nesnesine json vücut şu anda aşağıdaki kullanarak:

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 
} 

Yani evet, ben json kitaplığı kullanarak işlevi içinde bu kendim deserialise olabilir, ama yerine denetleyicisi için bir yol bulacağını için bunu yapmak ben mi.

GÜNCELLEME: Burada

Ben deseralise çalışıyorum .net nesnesidir için:

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

Emin misin? SearchModel.SearchSelections modeliniz sunucuya aktardığınız JSON modeline karşılık geliyor mu? İstersen – Anton

+0

evet, söz konusu her iki ekleyebilirsiniz? –

+0

evet – Anton

cevap

0

Aptal bir hata:

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

headers olmalıydı:

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