在我的应用程序的配置中,我删除了 customErrors 以测试难以复制的错误。
错误应该发生在哪里,我尝试一下:
if (ModelState.IsValid)
{
db.TarefaHoras.Add(tarefaHora);
try
{
db.SaveChanges();
}
catch (DbUpdateException ex)
{
ErroDetalhe erro = new ErroDetalhe();
erro.Data = tarefaHora.Data;
erro.UsuarioId = tarefaHora.ApplicationUserId;
erro.JSON = JsonConvert.SerializeObject(tarefaHora);
erro.Tipo = "TarefaHora";
erro.Controller = "TarefaHoras";
erro.Action = "Create Post";
erro.Exception = ex.GetType().FullName;
db.ErroDetalhes.Add(erro);
db.SaveChanges();
return RedirectToAction("ErroNaAtualizacaoDaBase", "Erros", new { id = erro.ID });
}
return RedirectToAction("Index", "Home");
}
return View(tarefaHora);
}
此错误仅在运行时发生,并且仅在 Azure 服务器上发生,因此我尝试更好地描述该错误,为此我创建了一个存储信息的表。
但是......
问题是我收到的 View 错误不是我创建的并在 Catch 中重定向的 View “ErrorInputUpdate”。
我得到默认的 AspNET 错误 View 。
因此,我进入“共享 View ”并删除了默认页面,并从 web.config 中删除了 customErrors。
即使如此,Azure 仍然提供默认的错误 View 。
有人知道会发生什么吗?
最佳答案
打电话db.SaveChanges();
产生异常。这意味着上下文 db
无效,应予以解决或丢弃。
但是,您正在做的是创建一个错误条目并使用相同的 db
添加context 仍处于错误状态。所以调用db.SaveChanges();
在 catch block 中仍然会生成异常,但这次不会被捕获。
解决方案是将错误写入数据库以外的其他内容(例如文件或其他内容),或者使用另一个 EF 上下文实例。其他选项是在调用 db.SaveChanges();
之前删除或更正无效条目。再次或不将错误存储在数据库中,但在重定向 View 中包含所有详细信息。
关于c# - Try catch 在 Azure 服务器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43160937/