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]

StackOverflow ハンドル エラーに関する Q&A

于 2010-07-01T17:53:55.770 に答える