Error handling (Sending ex.Message to the client)

后端 未结 6 2024
野趣味
野趣味 2020-11-29 20:38

I have an ASP.NET Core 1.0 Web API application and trying to figure out how to pass the exception message to the client if a function that my controller is calling errors ou

6条回答
  •  误落风尘
    2020-11-29 21:15

    Maybe that is helpful. You can return just object and sent for example a BadRequest (HTTP CODE: 400) with your custom object as actual parameter (I just used an interpolated string here) but you can put in anything.

    In your client side you can catch that error situation for example with an AJAX error handler.

    // GET: api/TruckFahrerGeoData
    [HttpGet]
    public object GetTruckFahrerGeoData()
    {
    
        var truckFahrerGeoDataItems = new List();
    
        var geodataItems = _context.TruckFahrerGeoData;
    
        foreach (var truckFahrerGeoData in geodataItems)
        {
            GeoTelemetryData geoTelemetryData = JsonConvert.DeserializeObject(truckFahrerGeoData.TelemetryData);
    
            if (geoTelemetryData == null)
            {
                return BadRequest($"geoTelemetryData null for id: {truckFahrerGeoData.Id}");
            }
            TruckFahrerGeoDataViewModel truckFahrerGeoDataViewModel = new TruckFahrerGeoDataViewModel
            {
                Speed = geoTelemetryData.Speed,
                Accuracy = geoTelemetryData.Accuracy,
                TruckAppId = geoTelemetryData.Activity.TruckAppId,
                TruckAuftragStatusId = geoTelemetryData.Activity.TruckAuftragStatusId,
                ClId = geoTelemetryData.Activity.ClId,
                TruckAuftragLaufStatusId = geoTelemetryData.Activity.TruckAuftragLaufStatusId,
                TaskId = geoTelemetryData.Activity.TaskId,
                TruckAuftragWorkflowStatusId = geoTelemetryData.Activity.TruckAuftragWorkflowStatusId
            };
    
            truckFahrerGeoDataItems.Add(truckFahrerGeoDataViewModel);
        }
    
    
        return truckFahrerGeoDataItems;
    }
    

    Or an even more cleaner way with IActionResult like that way:

    // GET: api/TruckFahrerGeoData
    [HttpGet]
    public IActionResult GetTruckFahrerGeoData()
    {
    
        var truckFahrerGeoDataItems = new List();
    
        var geodataItems = _context.TruckFahrerGeoData;
    
        foreach (var truckFahrerGeoData in geodataItems)
        {
            GeoTelemetryData geoTelemetryData = JsonConvert.DeserializeObject(truckFahrerGeoData.TelemetryData);
    
            if (geoTelemetryData == null)
            {
                return BadRequest($"geoTelemetryData null for id: {truckFahrerGeoData.Id}");
            }
            TruckFahrerGeoDataViewModel truckFahrerGeoDataViewModel = new TruckFahrerGeoDataViewModel
            {
                Speed = geoTelemetryData.Speed,
                Accuracy = geoTelemetryData.Accuracy,
                TruckAppId = geoTelemetryData.Activity.TruckAppId,
                TruckAuftragStatusId = geoTelemetryData.Activity.TruckAuftragStatusId,
                ClId = geoTelemetryData.Activity.ClId,
                TruckAuftragLaufStatusId = geoTelemetryData.Activity.TruckAuftragLaufStatusId,
                TaskId = geoTelemetryData.Activity.TaskId,
                TruckAuftragWorkflowStatusId = geoTelemetryData.Activity.TruckAuftragWorkflowStatusId
            };
    
            truckFahrerGeoDataItems.Add(truckFahrerGeoDataViewModel);
        }
    
    
        return Ok(truckFahrerGeoDataItems);
    }
    

提交回复
热议问题