c# - 非异步调用异步方法时出错
问题描述
我有以下异步方法:
[HttpGet]
[Route("api/SecurityRoles/AllowDeleteRole/{securityRoleId}")]
public async Task<IHttpActionResult> AllowDeleteRole(int securityRoleId)
{
_systemLogger.LogInfo($"Method api/SecurityRoles/AllowDeleteRole (Get) called with securityRoleId: {securityRoleId}");
var securityRolePermission =
await _securityRolePermissionService.SecurityRolePermissionsCountBySecurityRoleId(securityRoleId);
if (securityRolePermission != SecurityRoleDeleteResult.Success) return Ok(SecurityRoleDeleteResult.RolePermissionExists);
var securityRolePageEntity =
await _securityRolePageEntityService.SecurityRolePageEntityCountBySecurityRoleId(securityRoleId);
return Ok(securityRolePageEntity != SecurityRoleDeleteResult.Success ? SecurityRoleDeleteResult.RolePageEntityExists : SecurityRoleDeleteResult.Success);
}
它在很多地方都被使用,但是对于这个实例,我需要非异步地使用它,所以我有以下代码首先包装它:
public async Task<SecurityRoleDeleteResult> AllowDeleteRole(int securityRoleId)
{
string url = $"{_housingDataSecurityConfiguration.HousingDataSecurityWebApiUrl}SecurityRoles/AllowDeleteRole/{securityRoleId}";
var message = _apiClientService.Retrieve<HttpResponseMessage>(url);
if (message.StatusCode == HttpStatusCode.InternalServerError)
{
return SecurityRoleDeleteResult.ErrorOccurred;
}
int intResult = 0;
var apiResult = await message.Content.ReadAsStringAsync();
if (int.TryParse(apiResult, out intResult))
{
return (SecurityRoleDeleteResult)intResult;
}
else
{
return SecurityRoleDeleteResult.ErrorOccurred;
}
}
在被调用之前:
public SecurityRoleViewModel BuildViewModelForEdit(int id)
{
var enableButton = false;
_securityRoleService.AllowDeleteRole(id).ContinueWith(result =>
{
enableButton = (result.Result == SecurityRoleDeleteResult.Success) ? true : false;
});
SecurityRoleViewModel model = new SecurityRoleViewModel()
{
SecurityRole = _securityRoleService.SecurityRoleRetrieve(id),
RolePermissions = _securityRoleService.SecurityRolePermissionsRetrieve(id),
EnableDeleteButton = enableButton
};
return model;
}
我的问题是,当我尝试EnableDeleteButton = enableButton
在模型中设置时,它会在线上抛出以下错误:
enableButton = (result.Result == SecurityRoleDeleteResult.Success) ? true : false;
{“将值 3 转换为类型 'System.Net.Http.HttpResponseMessage' 时出错。路径 '',第 1 行,位置 1。”}
3 指的是我的 SecurityRoleDeleteResult 枚举中的枚举值之一。
解决方案
AllowDeleteRole
返回一个HttpResponseMessage
。result
您传递给 Lambda的对象是 Type Task<IHttpActionResult>
。所以当你做result.Result
你现在正在使用的对象时,IHttpActionResult
更具体地说,它是一个HttpResponseMessage
它出现的对象。
这是你的问题的原因
推荐阅读
- python - 比较具有相同形状但沿轴移动的两条曲线
- java - JVM 搜索 install4j 应用程序的回退
- ssl - 将 Http 更改为 Https 用于 c# Web 应用程序
- media-player - UNO 中对 Web Assembly 的媒体播放器支持
- angular - 如何从当前日期开始添加 1 小时的条件
- excel - OfficeOpenXml 删除超链接
- sass - 创建一个 SASS 函数以回退到一个值
- javascript - 如何通过 React.js 中动态值的变化来停止递归函数
- vba - NWBC SAP 和 Excel VBA
- mysql - Laravel - 获取上次更新表格的时间