2017-04-01 57 views
1

在我的應用程序的配置中,我刪除了customErrors以對難以複製的錯誤進行測試。嘗試catch在Azure服務器中不起作用

而且在錯誤應該發生,我把一試:

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的服務器上,所以我的嘗試是得到錯誤的,併爲這個更好的說明我創建了一個存放信息的表格。

但是....

的問題是,我得到了查看錯誤不是視圖「ErrorInputUpdate」我創建和在捕捉重定向。

我得到默認的AspNET錯誤視圖。

因此,我進入共享視圖並刪除了默認頁面,並從web.config中刪除了customErrors。

即使這時Azure仍會帶來默認錯誤視圖。

任何人有任何想法可能會發生什麼?

+0

在** Debug **中構建和發佈,如果您希望在Visual Studio中具有相同的錯誤處理體驗,則不發佈。 – evilSnobu

+0

你是怎麼推薦我在Debug中發佈的,但是我收到了一個如此普遍的錯誤[NullReferenceException:對象引用未設置爲對象的實例。]沒有顯示任何其他內容。任何想法? – Neumann

+0

添加一個斷點並逐步完成。您可以遠程執行 - https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-dotnet-troubleshoot-visual-studio(遠程調試部分)。堆棧跟蹤應該已經給你足夠的上下文來理解WHERE事情正在破裂。 – evilSnobu

回答

0

因此調用db.SaveChanges();會生成異常。這意味着上下文db無效,應該解決或丟棄。

但是,您正在做的是創建一個錯誤條目並使用相同的db上下文仍然處於故障狀態。所以在你的catch塊中對db.SaveChanges();的調用仍然會產生一個異常,但是這一次它不會被捕獲。

解決方案是將錯誤寫入數據庫以外的其他內容,例如文件或其他內容,或者使用其他EF上下文實例。其他選項是在再次調用db.SaveChanges();之前刪除或更正無效條目,或者不將錯誤存儲在數據庫中,但在重定向視圖中包含所有詳細信息。

+0

謝謝,我會嘗試分離所有db.savechanges – Neumann