[英]ASP.NET MVC - Automatically deserialise JSON Fetch POST
我正在使用github / fetch polyfill將一些數據發布回服務器。
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()
}
})
})
但是控制器不會像在表單變量中那樣自動將請求的主體反序列化到參數中的數據對象。 如果我使用XmlHttpRequest執行此操作,則它可以工作。
var request = new XMLHttpRequest();
request.open("POST", url, true);
request.setRequestHeader("Content-type","application/json;charset=UTF-8")
...
request.send(JSON.stringify(data))
目前,在控制器中接收請求的函數非常簡單-它什么也沒做,我只是試圖使用以下方法使其立即將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
}
所以是的,我可以使用json庫在函數內部反序列化此函數,但是我寧願找到一種方法讓控制器為我完成此任務。
更新:
這是我要反序列化的.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; }
}
}
愚蠢的錯誤:
header: {'Content-type' : 'application/json'}
應該是headers
:
headers: {'Content-type' : 'application/json'}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.