gpt4 book ai didi

asp.net-mvc - 在 asp.net mvc 中处理错误和异常

转载 作者:行者123 更新时间:2023-12-03 23:27:59 24 4
gpt4 key购买 nike

在 asp.net mvc 结构中处理错误和捕获异常的公认方法是什么?
普遍的共识是让异常(exception)冒泡。
那么您将在哪个层( View 或 Controller )处理异常(捕获它们/显示用户友好的文本等)。我的预感是它是在 Controller 中完成的?
编辑:
我想避免在每个 Controller 操作中重复相同的错误处理代码 ..因此,我正在寻找一个简洁的示例,说明如何在不重复相同代码的情况下实现错误处理。

最佳答案

在 Controller 中处理异常可能会导致大量重复代码。更好的方法是在扩展 HandleErrorAttribute 的操作过滤器中处理它们。 .在那里您可以记录异常,然后重定向到一个页面,该页面显示一条指示用户出现问题的好消息。

但是,在某些情况下,您需要在 Controller 方法中处理异常,例如,当您可以从异常中恢复并向用户显示适当的消息时,例如业务层抛出的异常表明值您提供的无效。在这种情况下,您应该捕获特定异常并向用户显示相同的 View 以及适当的消息。

编辑:

public class CustomErrorHandlerAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
var logger = log4net.LogManager.GetLogger("SomeLoggerHere");

logger.Error("An unhandled error occurred", filterContext.Exception);

if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.Status = "500 Internal Server Error";
filterContext.Result = new JsonResult { Data = new { ErrorMessage = filterContext.Exception.Message } };
filterContext.ExceptionHandled = true;
}
else
{
base.OnException(filterContext);
}

}

}

编辑 2:
然后你使用这样的属性:
[CustomErrorHandler]
public class AnyController : Controller
{
...
}

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

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