【发布时间】:2015-01-02 20:55:47
【问题描述】:
在我正在处理的 ASP.NET MVC Web 应用程序中,当应用程序中存在未捕获的错误时,我会显示错误视图。在 Web.config 中:
<customErrors mode="On" defaultRedirect="~/Error" />
控制器:
public class ErrorController : BaseController
{
public ActionResult Index()
{
return View();
}
}
我在文件夹 Views/Error,Index.cshtml 中有一个视图。它的内容对我面临的问题并不重要。
例如,当出现错误 404 时,一切正常 - 显示错误 Index.cshtml 页面(带有 URL http://localhost:51099/Error?aspxerrorpath=/Home/ssad,这没问题),并且在应用程序的错误日志中报告 404 错误。但是当出现其他错误时,例如当我尝试通过我的应用程序在不存在的文件夹中创建文件时,会显示错误 Index.cshtml 视图(使用 URL http://localhost:51099/Error?aspxerrorpath=/AdminDataExport/ResponseMatrix,可以)但是有两个报错——一个是找不到文件夹哪个是OK的,另一个是:
The view 'Error' or its master was not found or no view engine supports
the searched locations. The following locations were searched:
~/Views/AdminDataExport/Error.aspx
~/Views/AdminDataExport/Error.ascx
~/Views/Shared/Error.aspx
~/Views/Shared/Error.ascx
~/Views/AdminDataExport/Error.cshtml
~/Views/AdminDataExport/Error.vbhtml
~/Views/Shared/Error.cshtml
~/Views/Shared/Error.vbhtml
当我定义了 ErrorController 和相应的视图时,为什么应用程序会在此位置搜索错误文件?为什么在某些情况下会出现第二个错误而在某些情况下不会出现?
我想修复第二个错误。我尝试通过在 Views/Shared 中添加 Error.cshtml 文件来修复它。结果是第二个错误没有被记录,这正是我想要的,但 URL 与第一个错误不同 - http://localhost:51099/AdminDataExport/ResponseMatrix,我希望它是 http://localhost:51099/Error?aspxerrorpath=/AdminDataExport/ResponseMatrix。这可能吗?
【问题讨论】:
-
如果您现在正在编写代码并且可以使用其他方法,请查看我在这个问题中的回答,它可能会有所帮助 -> stackoverflow.com/questions/26357340/…
-
@SBirthare 我实施了您的解决方案,我有两个问题。一个在线
controller.ViewData.Model = new HandleErrorInfo(ex, currentController, currentAction);。在“ex”上,我收到警告“可能对标有 'NotNull' 属性的实体进行 'null' 分配”。其次,当我产生错误时,它会为我提供错误页面的源代码(HTML),而不是呈现的页面。你有过类似的经历吗?这种情况如何解决? -
我没有在这一行中为 ex 添加额外的检查,没有测试过这种情况。您可以添加支票。在第二个问题上,此方法根据错误代码调用 ErrorController 上的操作。您可以决定从该操作中返回什么。就我而言,我返回相应的视图。希望对您有所帮助。
-
关于第二个问题,我可以看到基于错误的正确页面。它也在生产中工作,所以我们的设置有所不同。您能否添加更多信息(可能在单独的 Q 中)关于实施后发生的事情,我可以提供帮助。
-
@SB 没什么好说的......当错误不是 404 时,您的解决方案可以很好地呈现页面。当错误是 404 时,我会在浏览器上显示一个页面源。 .我把所有错误都放到错误/索引中。
标签: c# asp.net-mvc error-handling custom-error-pages