GetTaskDetailsメソッドから結果を取得するアクションメソッドがあります。catchブロックを実装した後にelmahがエラーページをスローしない
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;
}
catchブロックがない場合、elmahはデータベースにエラーを記録し、エラーページにリダイレクトします。しかし、コードはcatchブロックを持っていません。 しかしGetTaskDetails方法に加えcatchブロックが
catch (Exception ex)
{
ErrorSignal.FromCurrentContext().Raise(ex);
}
以下のように存在する場合、エラーは、データベースと、エラーページを投げることなく、アクションメソッドに戻るに記録されています。 キャッチブロックをデータベースに記録してからコントローラにリダイレクトするのではなく、エラーページをスローする方法はありますか?私は正しいアプローチであると思っているか、コントローラーアクションメソッドで例外を再度処理する必要があるかどうかはわかりません。
キャッチなしでブロックを試してみると、私には説得力がないようでした。それは本当にベストプラクティスですか?あなたはアドバイスをお願いできます – ChinnaR
ELMAHのアイデア全体は、キャッチされない例外を記録することです。コードで既知のエラーを処理したい場合は、try-catchを使用してそれを処理し、catchのエラーページなどにリダイレクトする必要があります。既知のエラーを処理する場合は、実際に修正するエラーのリストである必要があるため、ELMAHにログすることはお勧めしません。 – ThomasArdal