gpt4 book ai didi

asp.net-mvc - MVC HandleError与customErrors标签

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

因此,如果我正确理解[HandleError] (see here),则必须将其添加到要处理错误的每个Controller中。

只需将错误页面的路径添加到web.config customErrors标记中似乎容易得多:

<customErrors mode="On" defaultRedirect="~/Error/Index" >
</customErrors>

在什么情况下使用[HandleError]会比这更好?

最佳答案

[HandleError]中,您可以实现很多。您可以记录该错误。您还可以找出错误的类型,并根据情况将用户重定向到特定页面。以下是一个示例-

public class HandleErrorAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
if (filterContext.ExceptionHandled)
return;

string referrerController = string.Empty;
string referrerAction = string.Empty;

if (filterContext.HttpContext.Request.UrlReferrer != null)
{
string[] segments = filterContext.HttpContext.Request.UrlReferrer.Segments;


if (segments.Length > 1)
{
referrerController = segments[1] != null ? segments[1].Replace("/", string.Empty) : string.Empty;
}

if (segments.Length > 2)
{
referrerAction = segments[2] != null ? segments[2].Replace("/", string.Empty) : string.Empty;
}
}


filterContext.Controller.TempData["exception"] = filterContext.Exception.Message;

filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(
new { controller = referrerController , action = referrerAction}));

filterContext.ExceptionHandled = true;

filterContext.HttpContext.Response.Clear();


}
}

在这段代码中,我将异常消息保存到 TempData,以便可以向用户显示错误消息。这只是一个示例,但是您可以执行需求所要求的任何操作。在这里,我通过继承 [HandleError]并实现 FilterAttribute来创建自己的 IExceptionFilter属性。您可以看到我在这里获得的那种力量。我实现了自己的属性来满足需求。但是,您可以使用内置的 [HandleError]获得类似的结果。

行号的目的2是处理链中其他人已经处理过异常的情况。然后,在这种情况下,您可能不希望再次处理它。 Response.Clear()用于在将用户重定向到新页面之前清除管道。您的情况下不必在那里。

关于asp.net-mvc - MVC HandleError与customErrors标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3874278/

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