MVC 2 Catch-All用于连接字符串丢失或连接失败

时间:2010-04-13 19:03:40

标签: asp.net-mvc error-handling connection-string database-connection web-config

如果我的项目使用不正确,不完整或缺失的连接字符串进行部署,我希望应用程序启动检查数据库连接,如果没有,则将所有请求定向到某种类型的DatabaseConnectionError页面,我的选择?我不认为有一个特定的http错误代码可以适应这个错误,我目前没有使用web.config为所有错误定义一个通用的catch。

我确实

    /// <summary>
    /// from http://www.davidjuth.com/asp-net-mvc-error-handler.aspx
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="args"></param>
    protected void Application_Error(object sender, EventArgs args)
    {
        Exception ex = Server.GetLastError();
        using (var crashFile = new System.IO.StreamWriter(Server.MapPath("~/App_Data/Crash_" + DateTime.UtcNow.ToString("yyyyMMdd") + ".log")))
            crashFile.WriteLine("<crash><time>" + DateTime.UtcNow.TimeOfDay.ToString() + "</time><url>" + HttpContext.Current.Request.Url + "</url><exception>" + ex.ToString() + "</exception></crash>");

    }

但它似乎不允许我用页面回复请求。

1 个答案:

答案 0 :(得分:2)

您可以重定向到Application_Error回调中的自定义错误页面:

protected void Application_Error(object sender, EventArgs args)
{
    ...
    HttpApplication app = (HttpApplication)sender;
    HttpContext context = app.Context;
    context.Response.Redirect("~/error.html");
}

如果您不想重定向,也可以使用context.Server.Transfer并设置一些特殊的http错误代码,例如500.