elmah 在实现 catch 块后不会抛出错误页面

elmah does not throw error page after implementing catch block

我有从 GetTaskDetails 方法获取结果的操作方法。

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);                 
}

错误被记录到数据库和控件 returns 到操作方法而不抛出错误页面。 有没有办法让 catch 块登录到数据库,然后抛出错误页面而不是重定向到控制器?我不确定我在想的是正确的方法还是需要在控制器操作方法中再次处理异常。

登录ELMAH后可以抛出异常,会导致错误页面显示:

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

我认为这样做没有任何好处,因为该解决方案的工作方式与没有 catch 块时完全一样。也许你可以在这里解释更多关于你想要实现的目标?我真的看不出你的问题。