c# - 处理验证方法错误消息的好方法

标签 c# error-handling licensing

我编写了一个许可系统,它检查许可的不同方面(例如开始日期、结束日期、系统限制等)。例如,我在许可证中有一个限制,即您不能创建超过 5 个用户帐户。我有一个方法(例如 bool NumberOfUsersIsCoveredByLicense),它调用一个通用方法(例如 bool IsValidLicense)。 IsValidLicense 将检查许可证文件是否被操纵、是否过期等。

现在的问题是错误输出。如您所见,我有返回值为 bool 的方法,所以我知道存在许可证违规,但我不知道许可证检查的哪一部分失败了。 所以我在想,如何返回一个值,它描述了许可证的哪一部分被违反了。最简单的方法是返回一个字符串值,我会做类似的事情

var licenseValidationResult = NumberOfUsersIsCoveredByLicense(4)
if(licenseValidationResult.Equals(String.Empty))
{
    //Success
}
else
{
    ErrorMessage = GetErrorMessageByErrorCode(licenseValidationResult);
}

因此,如果许可证有效,我将返回一个空字符串,如果它无效,它将以类似 error1;error2;error3.. 的形式返回错误代码。我实际上不确定,如果这是一个好的解决方案。另一种可能性是枚举,像这样:

[Flags]
public enum LicenseErrorCodes
{
    None = 0x00,
    LicenseExpired = 0x01,
    LicenseManipulated = 0x02,
    MaxNumberOfUsersReached = 0x04,
    [...]
}

但是,我不确定这是否是一个好的解决方案。是否有解决此类问题的“通用方法”/最佳实践?

最佳答案

如果许可违规被认为是失败错误,那么在失败的地方抛出异常可能是合理的.

因此,定义您的 InvalidLicenseException ..

关于c# - 处理验证方法错误消息的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18892987/

相关文章:

licensing - 使用 Nuget 查找第三方许可证

licensing - 订阅过期后,MSDN 产品 key 是否仍然有效?

c# - 为什么 RSAParameters Modulus 不等于 P 和 Q 的乘积?

c# - 将以毫秒为单位的日期时间转换为 double 或 int?

logging - 将 NGINX 中的 403 错误重定向为 null 或静默

r - prettyNum(.Internal(format(x,trim,digits,nsmall,width,3L,: invalid 'nsmall' argument

php - 403禁止的错误-执行和Ajax页面

licensing - 关于 ExtJS 许可证的问题

c# - 用子类创建泛型

c# - 启动 explorer.exe 在 C# 中无法正常工作