这是使用异常的正确方法吗?

2024-01-18

我有一个会员例外,如下所示:

public enum MembershipError
{
    EmailNotFound,
    EmailNotConfirmed,
    IncorrectPassword,
    EmailExists
}

public class MembershipException : ApplicationException
{
    public MembershipError MembershipError { get; set; }

    public MembershipException(MembershipError membershipError)
        : base(Enum.GetName(typeof (MembershipError), membershipError))
    {
        MembershipError = membershipError;
    }
}

我应该在例外中使用枚举还是为每个枚举创建例外?因为那样我会在捕获异常时放置逻辑,如下所示:

try
{

}
catch (MembershipException exception)
{
    switch (exception.MembershipError)
    {
        case MembershipError.EmailExists:

            break;
            //etc.
    }
}

我的服务层抛出这些异常,Web 层/操作中捕获这些异常,生成正确的 json 并将其返回到视图。 请提出替代方案?


例外只能用于特殊情况。您的枚举中列出的错误似乎相当标准,我选择不通过异常来表达它们。相反我更喜欢TryXXX风格 API 优先于异常。

例如

public bool TryGetMembershipData(
  string user, 
  out Data data, 
  out MemberShipError error) {
  ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这是使用异常的正确方法吗? 的相关文章

随机推荐

  • 访问查询错误(“from 子句中的语法错误”)

    consulta3 SELECT FROM Dept INNER JOIN Userinfo INNER JOIN Checkinout on Dept DeptName departamento where Dept Deptid Use
  • 修复 Google Chrome 上的蓝线

    我有以下 HTML div div aga ad gdas ga gs ds da dgs sd ds dg gdgsdgwa div div And CSS a b position absolute height 10px font s
  • 当进程尚未完成时 GetExitCodeProcess() 返回 1

    如果我创建一个进程和两个管道集 并且该进程在某个时间需要一些用户输入 则GetExitCodeProcess 从 Windows C API 总是返回1 作为示例 您可以使用 Windowstime命令 这将返回 The current t
  • 填充数据框中缺失的组合

    我的示例数据集 df lt data frame REGION c REGION A REGION A REGION B CATEGORY c A B B VALUE1 c 2 3 4 VALUE2 c 1 2 3 Result REGIO
  • Magento URL重写管理保留GET参数[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我经常使用 Magneto 的 URL 重写管理来重定向一堆页面 然而 URL 带有附属信息 即www mysite com aff 12
  • 移动网站 - 根本不滚动

    我到处搜索 我的网站没有固定的高度 没有固定的展示位置 它显示了我想要的视口 但仅此而已 它不会滚动或显示任何其他内容 我缺少什么 我已经尝试了各种溢出选项 但似乎没有任何效果 我会做以下 我首先会暂时禁用 删除样式表 以确保一切都像纯 h
  • Azure AD 身份验证中的访问令牌验证

    我能够在 Azure AD 身份验证中请求令牌 但问题是每当我更改 access token 中的最后一个字符时 它仍然在我的 API 中成功请求 我只是按照这个https mehmetkut com 2017 05 protect asp
  • 多个复选框值将显示在文本框中

    这是我的代码 div align center b A b div
  • 核心数据如何更新一条记录?

    我有一些对象是与对象用户一对一相关的图像 例如 Image User 现在我想做 当用户登录时 我向每个图像显示一个按钮以添加到收藏夹 当我单击此按钮时运行此代码 User user UserController sharedInstanc
  • ServiceStack:动态添加路由

    我还没有尝试过这个 但我希望每个模块 Silverlight 注册自己的路由 而不是将其添加到应用程序启动中 可以在应用程序启动后将路由添加到 AppHost 还是必须在配置步骤中立即注册它们 我正在考虑在启动时扫描所有程序集 并向AppH
  • 如何告诉 Grunt 在构建任务中不要缩小或连接 js 文件?

    我刚刚使用 Yeoman 搭建了一个 Angular 应用程序 我注意到build默认情况下 task 会执行几件事 包括缩小和连接 js 文件 我想要一个更简单的构建任务 不执行任何缩小或串联 而是只执行以下两件事 将我的 scss 编译
  • 尝试在 AWS Elastic Beanstalk Web 服务器(单实例)PHP 上配置 SSL 时出现问题

    我正在将客户的网站迁移到 AWS 我已配置所有内容并正常工作 但客户希望能够在该网站上接受付款 我遵循了几个关于如何使用 elastic beanstalk 让 SSL 工作的指南 目前 我已将其设置为使用源包 并在 ebextension
  • API网关上的数据聚合

    我正在研究微服务架构 我想聚合来自两个微服务的数据 例如 Frontend 调用 API Gateway API Gateway 调用两个微服务 Customer 和 Order 微服务 客户微服务返回客户详细信息 订单微服务返回客户订购的
  • perl排序问题

    我有一些巨大的日志文件需要排序 所有条目都有一个 32 位十六进制数字 这是我想要使用的排序键 有些条目是单行的 例如 bla bla bla 0x97860afa bla bla 其他的有点复杂 从上面相同类型的行开始 扩展到用大括号标记
  • Cesium:矩形实体上的自定义材质

    我正在尝试添加一个具有多种不同属性的实体 例如材质 主要是 alpha 和旋转 矩形图形已覆盖旋转 并且在我设置材质来表示纹理时起作用 viewer entities add name Site Layer rectangle coordi
  • 使用 OneToMany 的 Spring Data Projection 返回太多结果

    我有一个具有一对多关系 ContactInfo 的 JPA 实体 Person Entity public class Person Id GeneratedValue private Integer id private String n
  • Android 在 NativeScript 中不显示字体图标

    我正在尝试将 Ionicons 与 Android 和 NativeScript 一起使用 我已经包括了ionicon ttf文件和我的集合font family Ionicons 它可以在 iOS 上运行 但不能在 Android 上运行
  • GCHandle.FromIntPointer 未按预期工作

    这是一个非常简单 完整 的程序 用于练习 GCHandle FromIntPointer 的使用 using System using System Runtime InteropServices namespace GCHandleBug
  • CoTURN:如何使用 TURN REST API?

    我已经构建了 coturn 并成功运行它 ip 192 168 1 111 现在我面临的问题是通过REST API获取Turn凭证 https datatracker ietf org doc html draft uberti behav
  • 这是使用异常的正确方法吗?

    我有一个会员例外 如下所示 public enum MembershipError EmailNotFound EmailNotConfirmed IncorrectPassword EmailExists public class Mem