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.
Try Block ohne Fang schien mir nicht überzeugend. Ist es wirklich eine Best Practice? können Sie bitte Beratung – ChinnaR
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