ASP.NET中的自定义错误出错

时间:2014-08-08 16:11:36

标签: c# asp.net razor

我的ASP.NET MVC应用程序中有一个自定义错误页面。

我通过在Web.config中包含以下内容来启用页面:

<customErrors mode="On" defaultRedirect="Error">
    <error statusCode="404" redirect="Missing" />
</customErrors>

我的错误页面如下:     @model HandleErrorInfo

<h1 class="text-danger">Error</h1>
<h3 class="text-danger">
    An @Model.Exception.GetType().Name has occurred
    while processing your request.</h3>
<div>
    @Model.Exception.Message
</div>

大部分时间都可以使用。但是,当我得到以下异常时:

  

自创建数据库以来,支持“SiteDatabase”上下文的模型已更改。请考虑使用Code First Migrations来更新数据库。

这会导致出现一些错误,导致错误页面无法正确显示,然后页面上会显示以下文字:

  '/'应用程序中的服务器错误。

     

运行时错误
     描述:处理您的请求时发生异常。此外,执行第一个异常的自定义错误页面时发生另一个异常。请求已终止。

我该如何调试?我已经浏览了模板,似乎没有任何错误......

3 个答案:

答案 0 :(得分:0)

  

支持&#39; SiteDatabase&#39;自从以来情境发生了变化   数据库已创建。考虑使用Code First Migrations进行更新   数据库。

此错误在数据访问层中很深。如果您没有多个图层,请检查您的Entity Framework相关类。

您的配置适用于您的应用程序在发生错误时重定向。但是,即使在将应用程序加载到内存之前也会发生此错误,或者它在崩溃整个.NET应用程序时非常重要。

您的选择是创建一个静态HTML页面作为默认重定向,如此答案所示: https://stackoverflow.com/a/3377463/3918598

答案 1 :(得分:0)

错误页面应具有尽可能少的外部依赖项。考虑删除对母版页,布局页面,css,javascript和图像的外部依赖性。这样做的原因是,当显示错误页面时,在涉及应用程序或服务器的状态时,您不能假设任何内容。数据库可能已关闭,可能存在随机运行时错误,CDN可能已关闭等等。

尽可能让它成为一个静态的,包罗万象的页面,类似于GitHub的错误页面:https://github.com/asdfadsfasdfasdfasdfa

更多信息:https://github.com/styleguide/templates/2.0

答案 2 :(得分:0)

看起来您的错误处理页面正在重定向到控制器,然后控制器将模型传递给剃刀视图。发生错误表明Model对象,即HandleErrorInfo未正确填充,例如异常属性未填充异常。

我猜你的错误处理控制器可以正确处理剃刀视图级别错误,但是当它发生在更深层次,例如提供的那个,这是实体级错误时,你的HandleErrorInfo没有正确填充。

要进一步检查原因,请上传控制器中的代码吗?