Hi,
According to this doc: https://www.flexmonster.com/doc/implementing-api-controller/#step-8-handle-the-select-request
I created the same api controller action like following:
[HttpPost("select")]
public Task<SelectResponse> PostSelectAsync(SelectRequest request)
{
return _fmApiService.GetAggregatedDataAsync(request);
}
I am getting data successfully. For the first loading, here is the client request body:
{
"type":"select",
"index":"1e0f561c-8c16-4254-ca61-3a08cefa570a",
"query":{
"aggs":{
"by":{
"rows":[
{
"uniqueName":"AccomodatedDays"
}
]
},
"values":[
{
"func":"sum",
"field":{
"uniqueName":"GivenCA16"
}
}
]
}
},
"querytype":"select",
"page":0
}
But when I double click to any cell, or filter grid, here is the request body:
{
"type": "select",
"index": "1e0f561c-8c16-4254-ca61-3a08cefa570a",
"query": {
"limit": 1000,
"filter": {
"type": "and",
"value": [
{
"field": {
"uniqueName": "AccomodatedDays"
},
"include": [
{
"member": 0
}
]
}
]
},
"fields": [
{
"uniqueName": "AccomodatedDays"
},
{
"uniqueName": "AccessionNumber"
},
{
"uniqueName": "GivenCA16"
}
]
},
"page": 0
}
As you can see there is a filter property in the request body. filter.value.field and filter.value.include is not matching the model (SelectRequest). SelectRequest model is not contains these properties. So asp.net core api is returning HTTP 400 error if filter property is not null, because request-body and model is not matching.
Summary: we can not deserialize request-body to SelectRequest.
Hello, Patrick!
Thank you for your question.
We could not reproduce this issue on our GitHub example server with the /select
drill-through request having the same structure. The FDS DLL filter model uses the LogicFilter
and BaseFilter
classes. Both of these filter classes use different JSON converters, [JsonConverter(typeof(LogicFilterJsonConverter))]
and [JsonConverter(typeof(BaseFilterJsonConverter))]
correspondingly to parse the request filters. The converters use the System.Text.Json
for deserialization. After the deserialization, each FilterObject of request is converted to Filter
class, containing all available filter types.
Our recommendation is to check if any settings that may change the serializer from System.Text.Json
are present in your project. If so, try to remove them and see if this helps to fix the issue.
Please let us know if our reply was helpful in finding the cause of this issue.
Best Regards,
Maksym
We are using dotnet7, can this related to this?
Ok, I fixed this by custom deserializer.
Hello, Patrick!
Thank you for your reply.
We are glad to hear that you solved the issue by using the custom deserializer. Answering your previous question, it is unlikely that .NET 7 caused this issue since it is backward compatible with previous versions.
Please let us know if any other questions arise.
Best Regards,
Maksym