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

标签 c# asp.net .net asp.net-mvc asp.net-mvc-4

我已经创建了新属性并且在逻辑上我有一些异常 我的问题是:我应该如何在 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/

相关文章:

.net - 在 C# 中连接 ReadOnlySpan<char> 的最快方法

mysql - 如何从 MySQL 存储用户信息以供将来使用

c# - 如何使用 StreamReader(或其他替代方法)在 IOS 应用程序中的 Xamerin 上将文件读入数组

c# - 为什么 Action<T> 和 Predicate<T> 被用作或定义为委托(delegate)?

c# - jQuery如何在删除属性之前检查属性是否存在

c# - 仅从 Azure Web Scheduler 调用 Asp.Net MVC Web API

.net - 如何在VB.NET中与服务器交换数据包?

c# - LINQ 查询问题。需要检查是否存在

c# - 如何使用公钥加密技术对字符串进行加密

javascript - 如何使用 javascript/jquery 编辑/添加到 'url' 标签的 onclick 事件内的 'a'?