我在我的控制器(.NET CORE MVC应用程序)中执行操作,该操作需要从客户端发布数据时应捕获的两个或更多复杂参数。我想用HTTP.GET或HTTP.POST方法执行调用(取决于具体情况)。我尝试了不同的方法,但只与JObject绑定工作正常。其他人有空值。
我正在努力找出我做错了什么。有什么建议吗?
这是我的代码。
控制器:
[HttpPost]
public IActionResult GetDataPOST([FromBody]DataFilter dataFilter, [FromBody]SeriesFilter seriesFilter)
{
return Json(null);
}
[HttpPost]
public IActionResult GetDataPOSTjObject([FromBody]JObject stuff)
{
var content = stuff["dataFilter"].ToObject<DataFilter>();
var content2 = stuff["seriesFilter"].ToObject<SeriesFilter>();
return Json(null);
}
[HttpGet]
public IActionResult GetDataGET(DataFilter dataFilter, SeriesFilter seriesFilter)
{
return Json(null);
}
型号:
public class DataFilter
{
public string search { get; set; }
}
public class SeriesFilter
{
public string search { get; set; }
}
角:
$scope.SubmitTimeSeriesFilter = function (options) {
options.search = "Search...";
$http.get("@Url.Action("GetDataGET", "TimeSeries")", { params: { seriesFilter: options, dataFilter: options } }).success(function (rv) {
options.success(rv);
});
$http.post("@Url.Action("GetDataPOST", "TimeSeries")", { seriesFilter: options, dataFilter: options }).success(function (rv) {
options.success(rv);
});
$http.post("@Url.Action("GetDataPOSTjObject", "TimeSeries")", { seriesFilter: options, dataFilter: options }).success(function (rv) {
options.success(rv);
});
};
答案 0 :(得分:0)
你不能这样做。 [FromBody]
读取整个数据流,并且由于请求流是TCP / IP连接,因此它只能向前读取而不能被重新读取(读取:它只能读取一次)。
因此,每次操作只能有一个[FromBody]
。如果要发送多个模型,则需要创建一个可以包含这两个值的ViewModel。
public class DataSeriesFilterViewModel
{
public DataFilter DataFilter { get; set; }
public SeriesFilter SeriesFilter { get; set; }
}
但由于两者都是字符串,这些似乎是浪费空间,所以你可以做到
public class DataSeriesFilterViewModel
{
public string DataFilter { get; set; }
public string SeriesFilter { get; set; }
}
public IActionResult GetDataPOST([FromBody]DataSeriesFilterViewModel filter)
{
return Json(filter);
}