本地rest API控制器未从存储库函数调用中接收数据



我们的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在ASP中。Net Core API方法,该方法解释了如何在回复/回答部分中响应带有单词"实际"的ActionResult<objecttype>返回值。首先定义。你会看到这个词&;actual&;修改后的代码如下:

我修改后的代码张贴在这里,代码部分内部和代码部分下面都有注释。我在代码中的注释以"<==">

<&quot;==>"
// 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"查看相关代码修复语句。

最新更新