0

我遇到了将应用程序显示为页面中的堆栈跟踪的异常问题。

我认为我已经通过将其添加到以下内容来缓解这种情况web.config

<customErrors mode="On" defaultRedirect="~/error/GenericError">
    <error statusCode="403" redirect="~/error/NoAccess" />
    <error statusCode="404" redirect="~/error/NotFound" />
</customErrors>

它适用于不存在的路由,但不适用于控制器抛出异常时。这是控制器逻辑:

[HandleError]
public class DebugController : Controller
{      
    public ActionResult Index()
    {
        throw new Exception("** Testing custom error Handling **");
        return View();
    }
}



public class ErrorController : Controller
{
    //
    // GET: /Error/

    public ActionResult NotFound()
    {
        ViewData["error"] = "That page does not exist.";
        return View();
    }

    public ActionResult GenericError()
    {
        if (null == TempData["error"]))
        {
            ViewData["error"] = "We're sorry, but an error has occurred.";
        }
        else
        {
            ViewData["error"] = TempData["error"];
        }

        return View();
    }

    public ActionResult NoAccess()
    {
        ViewData["error"] = "You are not authorized to access application";
        return View();
    }

}

这是视图:

<%@ Page Title="" Language="C#"
    MasterPageFile="~/Views/Shared/CenterContentNoSidebar.Master"
    Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
GenericError
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>An Error has occurred</h2>
    <br />
    <%= ViewData["error"] %>
</asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="NavContent" runat="server">
</asp:Content>

我是否必须在 Global.asax 中添加一些内容才能使其正常工作?

4

2 回答 2

2

因此,HandleError 属性实际上是在处理错误并尝试从控制器视图文件夹或共享位置返回 Error.aspx 视图。customErrors web.config 部分永远不会被点击,并且由于该页面可能不存在,因此无论如何都会显示黄屏死机。不存在的路由正在工作,因为 IIS 抛出 404 错误并且没有控制器或 HandleError 属性的上下文。如果您想自己处理错误,我建议您删除 HandleError 属性并让 customErrors 通过。尽管您必须从您的错误控制器中获取最后一个异常并对其进行处理。这是关于我正在谈论的内容的一个很好的参考。

http://blog.dantup.com/2009/04/aspnet-mvc-handleerror-attribute-custom.html

它是一种或另一种类型的东西,HandleError 属性或 customErrors web.config 部分。

于 2010-07-01T17:54:31.150 回答
1

你看到这种行为是因为[HandleError]你放在你的顶线上。[HandleError]有关该属性的更多信息,请参阅 Stack 上的此问题/答案。

StackOverflow 处理错误问答

于 2010-07-01T17:53:55.770 回答