我的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来更新数据库。
这会导致出现一些错误,导致错误页面无法正确显示,然后页面上会显示以下文字:
>'/'应用程序中的服务器错误。运行时错误
描述:处理您的请求时发生异常。此外,执行第一个异常的自定义错误页面时发生另一个异常。请求已终止。
我该如何调试?我已经浏览了模板,似乎没有任何错误......
答案 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
答案 2 :(得分:0)
看起来您的错误处理页面正在重定向到控制器,然后控制器将模型传递给剃刀视图。发生错误表明Model对象,即HandleErrorInfo未正确填充,例如异常属性未填充异常。
我猜你的错误处理控制器可以正确处理剃刀视图级别错误,但是当它发生在更深层次,例如提供的那个,这是实体级错误时,你的HandleErrorInfo没有正确填充。
要进一步检查原因,请上传控制器中的代码吗?