2017-08-08 1 views
0

Ich habe Action-Methode, die das Ergebnis von GetTaskDetails-Methode erhält.Elmah wirft keine Fehlerseite nach dem Implementieren von Catch-Block

public ActionResult Details(int id) 
     {   
      Tasks task = this._projectService.GetTaskDetails(id); 

      return View(task); 
     } 

     public Tasks GetTaskDetails(int taskId) 
     { 
      SqlDataReader rdr = null; 
      Tasks task = null; 

      using (var conn = new SqlConnection(connectionString)) 
      { 
       SqlCommand comm = new SqlCommand("usp_TaskGetByTaskId", conn); 
       comm.CommandType = CommandType.StoredProcedure; 
       comm.Parameters.AddWithValue("@TaskId", taskId); 
       try 
       { 
        conn.Open(); 
        rdr = comm.ExecuteReader(); 

        if (rdr.HasRows) 
        { 
         if (rdr.Read()) 
         { 
          task = new Tasks() 
          { 
           UniqueId = Convert.ToInt16(rdr["UniqueId"]), 
           ProjectId = Convert.ToInt16(rdr["ProjectId"]), 
           Sequence = Convert.ToInt16(rdr["Sequence"]), 
           Description = rdr["Description"].ToString(), 
           StaffId = Convert.ToInt16(rdr["StaffId"]), 
           StatusId = Convert.ToInt16(rdr["StatusId"]), 
           HeldBy = rdr["HeldBy"].ToString(), 
           Progress = rdr["Progress"].ToString() 
          }; 
         } 
        } 
       }    
       finally 
       { 
        conn.Close(); 
       } 
      } 
      return task; 
     } 

Wenn kein catch-Block, loggt Elmah den Fehler in der Datenbank und Umleiten Seite auf Fehler das ist, was ich will. Aber der Code hat nicht den catch-Block. Aber wenn es ein catch-Block wird auf GetTaskDetails Verfahren wie unten

catch (Exception ex) 
{ 
    ErrorSignal.FromCurrentContext().Raise(ex);     
} 

Der Fehler in die Datenbank und die Steuerung kehrt zu der Aktionsmethode Seite ohne werfen Fehler protokollieren hinzugefügt ist. Gibt es eine Möglichkeit, dass der catch-Block in der Datenbank protokolliert wird und dann eine Fehlerseite ausgibt, anstatt auf den Controller umzuleiten? Ich bin mir nicht sicher, was ich denke, ist der richtige Ansatz oder sollte es die Ausnahme erneut in der Controller-Action-Methode behandeln müssen.

Antwort

0

Sie die Ausnahme auslösen können ELMAH nach der Anmeldung, die die Fehlerseite zu zeigen, verursachen:

catch (Exception ex) 
{ 
    ErrorSignal.FromCurrentContext().Raise(ex);     
    throw; 
} 

Ich sehe keinen Vorteil dabei, da diese Lösung genau funktionieren, wie wenn nicht den Fangblock haben. Vielleicht könnten Sie mehr darüber erklären, was Sie hier erreichen wollen? Ich sehe das Problem nicht wirklich in Ihrer Frage.

+0

Try Block ohne Fang schien mir nicht überzeugend. Ist es wirklich eine Best Practice? können Sie bitte Beratung – ChinnaR

+0

Die ganze Idee mit ELMAH ist es, nicht abgefangene Ausnahmen zu protokollieren. Wenn Sie einen bekannten Fehler in Ihrem Code behandeln möchten, sollten Sie das mit try-catch umgehen und auf eine Fehlerseite oder ähnliches in Ihrem Catch umleiten. Wenn ich einen bekannten Fehler behandle, würde ich nicht empfehlen, sich bei ELMAH anzumelden, da das eine Liste von Fehlern sein sollte, die wirklich behoben werden müssen. – ThomasArdal

Verwandte Themen