我使用自定义错误页面设置
<customErrors mode="On" defaultRedirect="~/Home/Error">
<error statusCode="404" redirect="~/Home/PageNotFound" />
</customErrors>
我创建了一个抛出异常的页面,然后重定向到正确的错误页面 .
但是我注意到 生产环境 网络服务器上的elmah中的这些错误:
System.InvalidOperationException未找到视图“错误”或其主控,或者没有视图引擎支持搜索的位置 . 搜索了以下位置:〜/ Areas / Football / Views / Draft / Error.aspx~ / Areas / Football / Views / Draft / Error.ascx~ / Areas / Football / Views / Shared / Error.aspx~ / Areas / Football /Views/Shared/Error.ascx~/ Views / Draft / Error.aspx~ / Views / Draft / Error.ascx~ / Views / Shared / Error.aspx~ / Views / Shared / Error.ascx~ / Areas / Football /意见/ Draft / Error.cshtml~ / Areas / Football / Views / Draft / Error.vbhtml~ / Areas / Football / Views / Shared / Error.cshtml~ / Areas / Football / Views / Shared / Error.vbhtml~ / Views / Draft / Error.cshtml~ / Views / Draft / Error.vbhtml~ / Views / Shared / Error.cshtml~ / Views / Shared / Error.vbhtml
为什么要在别处寻找错误页面?我删除了〜/ Views / Shared / Error.cshtml并在〜/ Home / Error中添加了我的自定义错误页面,因为我在配置文件中指定了一个新的默认值 .
有任何想法吗?
谢谢 .
5 回答
默认情况下,MVC项目会在
Global.asax.cs
文件中添加HandleErrorAttribute抛出未处理的异常时执行此过滤器 . 它将视图设置为
Error
. 因此MVC运行时尝试呈现该视图 . 但在你的情况下,没有这样的观点 . 因此它再次抛出另一个由ASP.NET运行时处理的异常,并显示您在Web.Config
文件中配置的错误页面 .您可以创建自己的异常过滤器并进行注册 .
我最终在Global.asax中取出了
HandleErrorAttribute
的注册,只使用了<customErrors>
部分 . ELMAH现在可以正确记录错误,我可以指定自定义错误页面 .我错过了什么吗?
您还可以使用Remove方法通过从全局过滤器中删除
HandleErrorAttribute
来确保未注册HandleErrorAttribute
:对于本文的未来读者,请注意Elmah添加了自己的
HandleErrorAttribute
,因此也期待Error.cshtml视图 . 请注意,我还安装了Elmah.MVC NuGet包,但这只是用于正确设置它 .是的,刚刚在nuget.org上注意到Elmah.MVC负责添加HandleErrorAttribute:
要禁用ELMAH的
HandleErrorAttribute
,请将以下行添加到Web.Config文件的appSettings
部分: