c# - Try catch 在 Azure 服务器中不起作用

标签 c# entity-framework azure asp.net-mvc-5 try-catch

在我的应用程序的配置中,我删除了 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/

相关文章:

c# - 将值添加到 XAML 中的自定义集合属性

c# - IsDirty 对 EF 实体使用 INotifyPropertyChanged

sql - 为什么 Azure SQL 数据库如此昂贵?

azure - 配置 Azure ContainerInstance 以使用自托管注册表

c# - 如何在 XAML/C# (Windows 8.1 - WinRT) 上水平和垂直虚拟化 "datagrid like"控件

javascript - 将服务器端变量传递给链接的 javascript 文件

c# - 无法加载文件或程序集 'Microsoft.ReportViewer.Common,版本 = 11.0.0.0

c# - 使用扩展方法 (EF5) 恢复 DbContext.Detach() 方法

c# - EF TPH 继承查询

c# - 将 Azure KeyVault key 转换为 RSACng 或 RSACryptoServiceProvider