gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 中的错误处理

转载 作者:行者123 更新时间:2023-12-03 05:35:35 25 4
gpt4 key购买 nike

如何正确处理 ASP.NET MVC 中 Controller 抛出的异常? HandleError 属性似乎只处理 MVC 基础结构引发的异常,而不处理我自己的代码引发的异常。

使用此 web.config

<customErrors mode="On">
<error statusCode="401" redirect="/Errors/Http401" />
</customErrors>

使用以下代码

namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
// Force a 401 exception for testing
throw new HttpException(401, "Unauthorized");
}
}
}

没有达到我所希望的结果。相反,我收到通用 ASP.NET 错误页面,告诉我修改 web.config 以查看实际的错误信息。但是,如果我不是抛出异常而是返回无效 View ,我会得到/Shared/Views/Error.aspx 页面:

return View("DoesNotExist");

像我上面所做的那样在 Controller 中抛出异常似乎绕过了所有 HandleError 功能,那么创建错误页面的正确方法是什么以及如何与 MVC 基础架构良好配合?

最佳答案

Controller.OnException(ExceptionContext 上下文)。覆盖它。

protected override void OnException(ExceptionContext filterContext)
{
// Bail if we can't do anything; app will crash.
if (filterContext == null)
return;
// since we're handling this, log to elmah

var ex = filterContext.Exception ?? new Exception("No further information exists.");
LogException(ex);

filterContext.ExceptionHandled = true;
var data = new ErrorPresentation
{
ErrorMessage = HttpUtility.HtmlEncode(ex.Message),
TheException = ex,
ShowMessage = !(filterContext.Exception == null),
ShowLink = false
};
filterContext.Result = View("ErrorPage", data);
}

关于asp.net-mvc - ASP.NET MVC 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/812235/

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