gpt4 book ai didi

c# - 在 asp.net mvc Controller 中处理异常

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

我已经创建了新属性并且在逻辑上我有一些异常我的问题是:我应该如何在 controller 中处理它并将其传递给 View ?在下面的代码中我抛出了异常,我应该如何将它移动到 View 中?

这是 Controller 中的属性

[HttpPost]
[CheckToken]
public JsonResult Edit(Roles role)
{
...
}

这是属性

public class CheckToken : FilterAttribute, IAuthorizationFilter
{
....

catch (HttpAntiForgeryException e)
{
throw new HttpAntiForgeryException("token not found");
}
}

最佳答案

来自本书CLR Via C# , 有一个关于异常处理的建议:

Don’t CatchEverything

A ubiquitous mistake made by developers who have not been properly trained on the proper use of exceptions is to use catchblocks too often and improperly. When you catch an exception, you’re stating that you expected this exception, you understand why it occurred, and you know how to deal with it.

只有当我们知道如何从异常中恢复我们的应用程序状态时,我们才应该捕获异常。

在您的代码中,除了重新抛出异常外,您什么都不做就捕获了异常。这是没有必要的。请注意,当您重新抛出异常时,CLR 会重置异常的起点。

catch (HttpAntiForgeryException e)
{
throw new HttpAntiForgeryException("token not found"); // CLR thinks this is where exception originated.
}

在您的情况下,我不会处理异常并将其传递给 View 。我只会让执行停止并在全局异常过滤器中处理它以返回错误给用户正确的http状态代码(例如:我们不应该返回一个状态为 200 的错误页面),并且可以选择将错误记录到数据库以供进一步分析。

有关如何实现全局异常过滤器的信息:http://forums.asp.net/t/1848242.aspx?How+to+implement+global+error+handling+in+ASP+NET+Web+API

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

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