【发布时间】:2021-10-01 09:47:39
【问题描述】:
我有,直到今天一直使用 POST 从 .NETCore/MVC 应用程序中的 API 控制器获取响应,但一直在努力提高性能并注意到 POST 无法缓存...
所以,我正在尝试更改内容以使用 GET 请求。
我不喜欢这样,因为我更喜欢以表格形式发送的数据,而不是在 URL 中......但如果必须,它必须
无论如何,我无法让 .NET 序列化使用 AJAX 帖子中的对象发布的数据(使用 jQuery 或其他方式,我不在乎)
我的控制器如下所示:
[HttpGet]
[Route("ProductStockHistory")]
public async Task< ChartResponse> ProductStockHistory([FromQuery] ChartQuery value)
{
//// do stuff
}
你可以看到我想发送一个ChartQuery 对象,看起来像这样:
public class ChartQuery
{
public string dateFrom { get; set; }
public string dateTo { get; set; }
public string groupBy { get; set; } = "month";
// more values...
}
使用 POST,我会这样做:(将 [HttpGet] 属性更改为 [HttpPost] 和 [FromQuery] 更改为 [FromBody])
$.ajax({
type: "POST",
url: "/Chart/" + chartAction,
contentType: "application/json",
dataType: "json",
data: JSON.stringify({
dateFrom : dateFromValue,
dateTo : dateToValue,
groupBy : groupByValue,
// more values...
}),
success: function (data) {
// do stuff
}
});
这很好用……但根据我的开场白,我无法缓存 POST 请求/响应。
您可能会说我正在尝试获取图表的数据,因此它不会更改,因此缓存响应对我来说就足够了。
我尝试了 AJAX 代码的许多变体,对我来说最合乎逻辑的看起来是这样的:
$.ajax({
type: "GET",
url: "/Chart/" + chartAction,
contentType: "application/json",
dataType: "json",
data: { value: JSON.stringify({
dateFrom : dateFromValue,
dateTo : dateToValue,
groupBy : groupByValue,
// more values...
})},
processData: true,
success: function (data) {
// do stuff
}
});
这会生成一个类似:/Chart/ProductStockHistory?value=%7B"dateFrom "%3AdateFromValue%2C"dateTo"%3AdateToValue%7D 的 URL,看起来差不多,但 .NET 没有序列化该值,我在控制器中得到一个空/默认对象为 value。
我完全有可能处理错了,但是在控制器中使用复杂对象作为值时如何获得缓存响应?
编辑:注意,我意识到我可以更改控制器以接收 ChartQuery 对象的各个值,但这不是我想要实现的目标
【问题讨论】:
标签: ajax asp.net-core controller asp.net-core-mvc asp.net-core-webapi