asp.net-mvc - WepApi TaskCanceledException 任务被取消。httpClient
问题描述
它运行良好,但我在 api 中进行了一些更改,添加了更多控制器,然后它停止工作,总是抛出异常:GetAsync().result 行中的“TaskCanceledException:任务被取消” . 我增加超时并无限保持加载。向控制器 API 发出请求的代码控制器 APP:
public ActionResult Login(LoginM us)
{
try
{
cuentaM account = new cuentaM();
HttpClient client = new HttpClient();
var result = client.GetAsync("http://localhost:26723/api/Login" + "?email=" + us.email + "&password=" + us.password).Result;
if (result.IsSuccessStatusCode)
{
account = result.Content.ReadAsAsync<cuentaM>().Result;
}
Session["cuenta"] = account;
return RedirectToAction("Index", "Home");
}
catch (Exception ex)
{
throw;
}
}
控制器 API 代码:
public HttpResponseMessage Get(string email, string password)
{
try
{
using (elevationbEntities db = new elevationbEntities())
{
usuario user = db.usuarios.Where(m => m.email == email && m.password == password).SingleOrDefault();
cuentaM account = new cuentaM();
if (user != null)
{
account = (from o in db.cuentas
join cu in db.cuentausuarios on o.idCuenta equals cu.idCuenta
join u in db.usuarios on cu.idUsuario equals u.idUsuario
where u.idUsuario == user.idUsuario
select new cuentaM { idUsuario = user.idUsuario, idCuenta = o.idCuenta, CodigoUnico = o.CodigoUnico })
.FirstOrDefault();
}
else
{
account.Error = "Wrong Password or Email";
}
HttpResponseMessage response;
response = Request.CreateResponse(HttpStatusCode.OK, account);
return response;
}
}
catch (TaskCanceledException ex)
{
HttpResponseMessage response;
response = Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
return response;
}
}
解决方案
如本文所述,您可能会因阻塞异步调用而陷入死锁。这是有问题的行:
account = result.Content.ReadAsAsync<cuentaM>().Result;
将方法签名更改为Login
:
public async Task<ActionResult> Login(LoginM us)
然后将有问题的行更改为使用await
,而不是.Result
:
account = await result.Content.ReadAsAsync<cuentaM>();
推荐阅读
- c++ - Pybind11 内存似乎在调用之间发生了变化
- jena - Jena tdbloader 性能和限制
- mysql - 在单个查询中使用多个 COUNT 子句的正确方法是什么?
- docusignapi - DocuSign - PowerForms 是否支持 Webhooks/Connect
- keycloak - Keycloak - 将角色添加到用户配置文件
- c# - 如何运行循环任务直到其他任务完成
- java - 声纳扫描仪可以在没有启动和运行声纳服务器的情况下工作
- laravel - laravel elequent hasmany 有多个条件
- blazor - Blazor:带参数的路由未解析
- reactjs - 隐藏/删除反应js中的组件