gpt4 book ai didi

asp.net-mvc - 显示自定义错误页面并显示异常详细信息

转载 作者:行者123 更新时间:2023-12-04 16:44:37 25 4
gpt4 key购买 nike

我有一个自定义的 Errors Controller ,如下所示:

public class ErrorsController : BaseController
{
public ActionResult RaiseError(string error = null)
{
string msg = error ?? "An error has been thrown (intentionally).";
throw new Exception(msg);
}

public ActionResult Error404()
{
Response.TrySkipIisCustomErrors = true;
Response.StatusCode = (int)HttpStatusCode.NotFound;
return View();
}

public ActionResult Error500()
{
Response.TrySkipIisCustomErrors = true;

var model = new Models.Errors.Error500()
{
ServerException = Server.GetLastError(),
HTTPStatusCode = Response.StatusCode
};

return View(model);
}
}

我的 Errors500.cshtml 看起来像这样:
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Error500</title>
</head>
<body>
<div>
An internal error has occurred.
@if (Model != null && Model.ServerException != null && HttpContext.Current.IsDebuggingEnabled)
{
<div>
<p>
<b>Exception:</b> @Model.ServerException.Message<br />
</p>
<div style="overflow:scroll">
<pre>
@Model.ServerException.StackTrace
</pre>
</div>
</div>
}
</div>

</body>
</html>

并且我的 web.config 指定了我的错误处理程序:
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace" >
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" subStatusCode="-1" responseMode="ExecuteURL" path="/Errors/Error404" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" subStatusCode="-1" responseMode="ExecuteURL" path="/Errors/Error500" />
</httpErrors>

问题是:每次我调用/errors/raiseerror 来测试我的 500 处理时;我被重定向到错误/错误 500(很好)。但是,异常数据不会呈现在页面上,因为 Server.GetLastError() 调用返回 null 而不是 RaiseError() 抛出的异常。

处理自定义 500 错误页面的最佳方法是什么,该自定义页面也可以呈现异常详细信息?

最佳答案

最简单的方法是:

使用 MVC 的内置支持来处理异常。默认情况下,MVC 使用 HandleErrorAttribute 注册于 App_Start\FilterConfig.cs :

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}

现在确保您有一个名为 Error 的 View 。在 Views\Shared文件夹。默认情况下, View 的模型类型为 HandleErrorInfo具有名为 Exception 的属性.如果需要,您可以显示异常消息和其他详细信息:

Error.cshtml
@model HandleErrorInfo

@if(Model != null)
{
@Model.Exception.Message
}

您可以自定义 Error.cshtml按您想要的方式翻页...

关于asp.net-mvc - 显示自定义错误页面并显示异常详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19735740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com