开发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)重定向到错误页面的最佳方式有关。
欢迎提出其他建议!
答案 0 :(得分:0)
创建一个操作/控制器来处理您需要显示的错误消息/ UI。然后使用MVC控制器OnException
自定义响应,然后使用RedirectToAction().
OnException
与HandleErrorAttribute
类似,但提供了更大的灵活性。它适用于所有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"
};
}
}
这是一种建议的方法:)