PageResult
响应缺少 nextPageLink
和 count
通过 System.Text.Json
序列化时的值(ASP.NET Core 3 默认)为以下结果:
[ApiController]
[Route("api/[controller]")]
public class ValuesController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
var items = new List<string> { "value" };
var pageResult = new Microsoft.AspNet.OData.PageResult<string>(items, new Uri("http://localhost/foo"), items.Count);
return Ok(pageResult);
}
}
但是,当我使用 Newtonsoft.Json
formatter 时,结果正确:public void ConfigureServices(IServiceCollection services)
{
services.AddControllers().AddNewtonsoftJson();
}
结果与 System.Text.Json
:[
"value"
]
结果与 Newtonsoft.Json
:{
"items": [
"value"
],
"nextPageLink": "http://localhost/foo",
"count": 1
}
知道这种行为的原因是什么吗?
最佳答案
在重新阅读问题时,这并没有直接回答为什么 OP 的问题,即为什么一个格式化程序会这样做而另一个不会导致正确的输出,但可能会为 OP 提供一些开始寻找的地方......
我在使用 OData 和 Asp.Net Core 时也看到了一些有趣的行为,很难从在线文档中解读这些天你应该做什么,因为大多数文档似乎已经过时或适用于 OData 的早期版本。例如,您会在某些文档中看到一些对 GetInlineCount() 的引用,但它似乎已从 API 中删除。
对于您的查询,我认为您有两种选择
首先,将您的返回类型更改为 IQueryable 然后
指定属性 [EnableQuery(PageSize=10)]
.
或者,保留你所拥有的,并使用 PageResult
目的:return new PageResult<object>(listOfObjects as IEnumerable<object>, Request.GetNextPageLink(5), Request.ODataFeature().TotalCount);
您可以通过如下设置 Request.ODataFeature().TotalCountFunc 函数来解决 Request.ODataFeature().TotalCount 不返回值的问题...Request.ODataFeature().TotalCountFunc = () => listOfobjects.Count();
关于c# - ASP.NET Core 3.1 OData PageResult 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59844505/