我们的VS-2022开发项目是Blazor WASM Core-6,具有本地REST-API的数据。使用Postman,我的测试并没有像人们期望的那样从控制器调用到存储库函数(使用断点和本地调试)中获取数据。
存储库函数返回语句为return Ok(vehicleTrips);
。IEnumerablevehicleTrips
数据变量包含从DB获取的正确的4条记录。
从控制器到存储库函数的调用是:
var result = (await motripRepository.GetMOTripsByDateRange((int)eModelType.Vehicle, pVehicleList, pDateFrom, pDateTo)!)!;
控制器功能签名为:
[HttpGet("byDateRange/{pVehicleList}/{pDateFrom}/{pDateTo}")]
[ActionName(nameof(GetVehicleMOTripsByDateRange))]
public async Task<ActionResult<IEnumerable<MOTRIP>>> GetVehicleMOTripsByDateRange([FromRoute] string pVehicleList, [FromRoute] string pDateFrom, [FromRoute] string pDateTo) {
这是我的问题。从存储库返回的result
值有一个为null的return.Value
——而不是我们应该有的四个行程记录。
此外,VS-Studio的"本地"调试器显示return
还有其他属性,如.Return
和.Return.Value.Count
为4(4)。
我的问题是"什么可能导致这个"?所有其他的rest-api调用和对Postman的控制器调用都可以正常工作。
我是否选择了错误的"控制器"类型?从visual studio ?我在编码经典MVC web应用程序方面没有任何经验。VS-Blazor提供了多种控制器类型。在过去,我"抄袭"。一个工作控制器和"更改代码";查看不同的"型号">
欢迎并感谢您的帮助。谢谢约翰…
我发现了导致这个结果的真正原因。Value为空,与控制器类型无关——它在对存储库函数返回值的解释中。
我发现了一个SO链接从ActionResult
我修改后的代码张贴在这里,代码部分内部和代码部分下面都有注释。我在代码中的注释以"<==">
<"==>"// Initialize.
MOTRIP emptyMoTrip = new MOTRIP();
MOTRIP? resultMoTrip = new MOTRIP();
IEnumerable<MOTRIP> allTrips = Enumerable.Empty<MOTRIP>();
int daysPrevious = (int)(pTripType == eTripType.Any ? eDateRangeOffset.Week : eDateRangeOffset.Month);
// convert DateRangeOffset to 'dateonly' values.
DateOnly dtTo = DateOnly.FromDateTime( DateTime.Today);
DateOnly dtFrom = dtTo.AddDays(daysPrevious);
// Fetch the vehicle trips by date-range.
var result = await GetVehicleMOTripsByDateRange(UID_Vehicle.ToString(), dtFrom.ToString(), dtTo.ToString());
if ((result.Result as OkObjectResult) is null) { **<== this is the fix from the SO link.==>**
return StatusCode(204, emptyMoTrip);
}
var statusCode = (result.Result as OkObjectResult)!.StatusCode;
if (statusCode==204) {
return StatusCode(204, emptyMoTrip);
}
**<== this next section allows code to get the result's DATA for further processing.==>**
var actual = (result.Result as OkObjectResult)!.Value as IEnumerable<MOTRIP>;
allTrips = (IEnumerable<MOTRIP>)actual!;
if ((allTrips is not null) && (!allTrips.Any())) {
return StatusCode(204, emptyMoTrip);
}
<== this next section continues with business-logic related to the result-DATA.==>
if (allTrips is not null && allTrips.Any()) {
switch (blah-blah-blah) {
**<== the remainder of business logic is not shown as irrelevant to the "fix".==>**
请使用浏览器搜索"<=="找到我的代码注释。请使用浏览器搜索"实际";和";OkObjectResult"查看相关代码修复语句。