当前,我有一个.NET Core 3.1 WebAPI方法,该方法正在与SOAP服务异步通信。当我运行任务并获得响应时,它通常可以正常工作,但有时SOAP服务会发送200 Ok()且响应为空。这对我造成了严重破坏。如何检查基础Result / GetSomeFancyDataResult为空?
因为GetSomeFancyDataResult是“结果”下的结果,我得到了有效的“结果”,但“ GetSomeFancyDataResult”为空,当我尝试检查其是否为空时,我收到未实例化的错误。
// make an async request to legacy SOAP service
var client = new mySoapService.serviceClient();
var request = new mySoapService.GetSomeFancyDataRequest(1, "abc", 234);
var task = Task.Run(async () => await client.GetSomeFancyDataAsync(request));
// how to check if GetSomeFancyDataResult exists ?
if (task.Result.Equals(null) || task.Result.GetSomeFancyDataResult.Equals(null))
return null; // exit here, abort!
// process the results when data is found in the result ??
var results = task.Result.GetSomeFancyData.Select(result => result.MyFancyFieldOne);
我的问题是,这无法按预期工作...
// how to check if GetSomeFancyDataResult exists ?
if (task.Result.Equals(null) || task.Result.GetSomeFancyDataResult.Equals(null))
return null; // exit here, abort!
也许我凝视了太久了。我在这里俯瞰什么?我已经搜索过SO和互连网,但是还没有找到如何正确检查null的方法。帮助?
考虑一下等待结果,然后检查返回的值。
// make an async request to legacy SOAP service
var client = new mySoapService.serviceClient();
var request = new mySoapService.GetSomeFancyDataRequest(1, "abc", 234);
var result = await client.GetSomeFancyDataAsync(request);
//check if GetSomeFancyDataResult exists
if (result == null || result.GetSomeFancyDataResult == null)
return null; // exit here, abort!
// process the results when data is found in the result ??
var results = result.GetSomeFancyData.Select(x => x.MyFancyFieldOne);
这对我来说最终是最干净的,谢谢大家的帮助,但没有投票!
使用@Matt Johnson-Pint的建议对我来说最干净。
// make an async request to legacy SOAP service
var client = new mySoapService.serviceClient();
var request = new mySoapService.GetSomeFancyDataRequest(1, "abc", 234);
var task = Task.Run(async () => await client.GetSomeFancyDataAsync(request));
// process the results when data is found in the result ??
var results = task.Result?.GetSomeFancyData?.Select(result => result.MyFancyFieldOne);
if (results == null)
return null;
return results;