如何捕获网络错误并重定向到html页面

时间:2017-12-20 02:06:17

标签: c# asp.net-mvc

开发C#,MVC5网络应用....

在我的一个类方法中,当我收到网络错误(即无法连接到数据库)时,我想重定向到HTML错误页面。处理这个问题的最佳方法是什么?

这是我到目前为止所尝试的......

public static class MyClass
{
    public static string MyMethod(SettingKey key)
    {
        try
        {
            using (var cnn = new dbContext())
            {
                return cnn.MySettings.Where(s => s.Key == key.ToString()).AsNoTracking().Select(s => s.Value)
                    .FirstOrDefault();
            }
        }
        catch (Exception e)
        {
            if (e.InnerException != null && e.InnerException.Message.Contains("A network-related or instance-specific error occurred"))
            {
                return Redirect("error_network_related.html");
            }
            return "";
        }
        return "";
    }
}

正如您所看到的,只要网络关闭且无法访问数据库,我就会特意尝试在应用程序的根目录中导航到error_network_related.html。

因此,我的问题与(1)捕获此特定网络相关错误(db down)的最佳方法和(2)重定向到错误页面的最佳方式有关。

欢迎提出其他建议!

1 个答案:

答案 0 :(得分:0)

创建一个操作/控制器来处理您需要显示的错误消息/ UI。然后使用MVC控制器OnException自定义响应,然后使用RedirectToAction().

返回特定操作

OnExceptionHandleErrorAttribute类似,但提供了更大的灵活性。它适用于所有HTTP状态代码,而不仅仅是500级响应。它还使您能够记录错误!

public class UserMvcController : Controller
{
   protected override void OnException(ExceptionContext filterContext)
   {
      filterContext.ExceptionHandled = true;

      //Redirect or return a view, but not both.
      filterContext.Result = RedirectToAction("Index", "ErrorHandler");
      // OR 
      filterContext.Result = new ViewResult
      {
         ViewName = "~/Views/ErrorHandler/Index.cshtml"
      };
   }
}

这是一种建议的方法:)