ASP.NET MVC-自动取消序列化JSON Fetch POST

ASP.NET MVC - Automatically deserialise JSON Fetch POST

本文关键字:序列化 JSON Fetch POST 取消 NET MVC- ASP      更新时间:2024-01-25

我正在使用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'}