gpt4 book ai didi

c# - 捕获显示信息的异常

转载 作者:行者123 更新时间:2023-11-30 22:23:52 25 4
gpt4 key购买 nike

我已经设置好,如果抛出 Exception,我可以在我的自定义错误页面中显示它。但在某些情况下,我不想被导航到错误页面,而是希望它显示一个简单的对话框窗口。

public ActionResult Page1()
{
//The custom error page shows the exception, if one was thrown

throw new Exception( "An exception was thrown" );

return View();
}


public ActionResult Page2()
{
//A dialog should show the exception, if one was thrown

try
{
throw new Exception( "An exception was thrown" );
}
catch( Exception ex )
{
ViewData["exception"] = ex;
}
return View();
}

是否可以使用 CustomAttribute 来处理在 Controller 操作中抛出的异常?如果我将 CatchException 添加到 Page2,我能否在每次抛出异常时自动将异常存储在 ViewData 中。我对 CustomAttributes 没有太多经验,如果你能帮助我,我将不胜感激。

Page2 示例工作得非常好,我只是想让代码更简洁,因为在每个操作(我想显示对话框的地方)都 try catch 并不是很漂亮。

我正在使用 .NET MVC 4。

最佳答案

您可以创建一个基本 Controller 来捕获异常并为您处理。此外,看起来 Controllers 已经有一种机制可以为您做到这一点。您必须重写 Controller 内的 OnException 方法。你可以在这里得到一个很好的例子: Handling exception in ASP.NET MVC

此外,这里还有另一个关于如何使用 OnException 的答案: Using the OnException

通过使用它,您的代码会更简洁,因为您不会执行大量的 try/catch block 。

您必须过滤要处理的异常。像这样:

protected override void OnException(ExceptionContext contextFilter)
{
// Here you test if the exception is what you are expecting
if (contextFilter.Exception is YourExpectedException)
{
// Switch to an error view
...
}
//Also, if you want to handle the exception based on the action called, you can do this:
string actionName = contextFilter.RouteData.Values["action"];
//If you also want the controller name (not needed in this case, but adding for knowledge)
string controllerName = contextFilter.RouteData.Values["controller"];
string[] actionsToHandle = {"ActionA", "ActionB", "ActionC" };

if (actionsTohandle.Contains(actionName))
{
//Do your handling.
}

//Otherwise, let the base OnException method handle it.
base.OnException(contextFilter);
}

关于c# - 捕获显示信息的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13127650/

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