Skip to content

Fast.IaaS

逐成员 API、参数与返回参考

版本 3.5.28;目标 netstandard2.1。通用扩展与工具包,不依赖 Web 宿主或 Fast.Runtime,不需要 DI 注册。命名空间主要为 Fast.IaaS

bash
dotnet add package Fast.IaaS

工具与扩展模块

公开类型 / 家族合同与用途
DateTimeUtilDateTimeExtensionTimeSpanExtension月首/月末、日期差、日期扩展与时长描述;不要混淆日期值与时区转换
MaskingUtilNameMaskingNameKeepLastMaskingMobileMaskingIdCardMaskingEmailMaskingBankCardMaskingAddressMaskingCarNumberMaskingIpMasking;返回展示文本,不修改原始业务字段
VerificationUtilValidateExtension规则校验辅助,不是外部身份真实性验证
Base64ExtensionStringEncodingExtensionBase64 与文本编码;Base64 方法默认随机前缀长度为 6,编码和解码须使用同一参数,不等同于标准无前缀 Base64
NumberUtil.IdToCodeByLong(long id, int maxLength = 12)数字标识编码;不应当作授权凭证
CoordinateUtilIsInChinaWGS84ToGCJ02GCJ02ToWGS84;经纬度参数顺序为 lat、lng
FileUtilGuidUtilGlobalConstant文件、标识与公共常量;文件工具属于实际 I/O
ObjectExtensionConvertExtensionStringExtensionDecimalExtension对象/数值/文本转换;非法输入按具体方法异常合同处理,不承诺统一返回空值
IDictionaryExtensionDataTableExtensionGroupByExtensionLinqExpressionExtension集合、表格与表达式处理
AssemblyExtensionTypeExtensionMethodInfoExtensionFieldInfoExtensionEnumExtensionEnumItem<TProperty>反射和枚举辅助,包含类型与泛型约束
csharp
using Fast.IaaS;

string duration = TimeSpan.FromMinutes(1).ToDescription(); // 01分00秒
string displayPhone = MaskingUtil.MobileMasking("13800000000");

RetryUtil

csharp
public static Task InvokeAsync(
    Func<Task> action, int numRetries, int retryTimeout = 1000,
    bool finalThrow = true, Type[] exceptionTypes = null,
    Func<Exception, Task> fallbackPolicy = null,
    Func<int, int, Task> retryAction = null,
    CancellationToken cancellationToken = default);

numRetries 是初次执行之外的最大重试次数,retryTimeout 单位毫秒;小于等于 0 的次数只直接执行一次,该分支不调用重试或降级回调,也不使用 finalThrow 屏蔽异常。action 为空抛 ArgumentNullException。异常类型列表非空时按可赋值关系过滤,失败耗尽或类型不匹配时调用 fallback;finalThrow = true 继续抛原异常,false 则结束。取消令牌在调用前、异常处理入口和重试等待期间检查;action 内部的取消需要自行传递。已检测到调用方取消时,不再调用 fallback,也不因 finalThrow = false 转为成功。

同步 Invoke 接收 Action 与同步回调,内部等待异步实现;异步调用链应使用 InvokeAsync。重试可能重复副作用,工具不提供幂等、事务或补偿。

树结构

TreeBuildUtil<TEntity, TProperty> 要求实体实现 ITreeNode<TProperty>,标识类型为满足比较、转换、格式化约束的值类型。SetRootParentId 默认为 default(TProperty)Build(List<TEntity>) 返回根节点列表,空输入返回空列表。父节点不在当前集合中的节点也被当作根,按 GetSort() 排序,并通过 SetChildren 修改节点的子集合。

输入应避免环和重复标识;当前递归实现不提供环检测,不应将任意外部图直接当作合法树。

CryptoUtil API 家族

入口用途与参数边界
GenerateRandomBytes(int length)FixedTimeEquals(byte[], byte[])随机字节与固定时间比较
MD5EncryptSHA1EncryptSHA256Encrypt/SHA384Encrypt/SHA512Encrypt方法历史名称含 Encrypt,返回的是摘要,不是可解密密文;SHA256Bytes/SHA384Bytes/SHA512Bytes 返回字节
HMACSHA256Encrypt/HMACSHA384Encrypt/HMACSHA512Encrypt输入文本和密钥,返回消息认证摘要
PBKDF2SHA256HashPasswordPBKDF2SHA256/VerifyPasswordPBKDF2SHA256密钥派生及口令摘要验证;默认迭代次数 600000,摘要生成与验证须使用对应载荷格式
HKDFSHA256输入密钥材料、可选 salt/info;默认 outputLength 为 32 字节
AESEncrypt/AESDecrypt显式 key、vector 及模式参数,默认 CipherMode.CBC
AESEncryptAuthenticated/AESDecryptAuthenticatedAESEncryptWithPassword/AESDecryptWithPassword不同入口使用不同载荷格式;认证与口令方法分别成对使用,不与原始密钥接口混用
GenerateRSAKeyPair(int modulusLength = 2048)返回嵌套公开类型 CryptoUtil.PemKeyPair
RSAEncryptOAEP/RSADecryptOAEPRSASignPSS/RSAVerifyPSS分别为 RSA 加解密、签名验签;使用对应公钥/私钥参数
GenerateECDSAKeyPairECDSASign/ECDSAVerify默认曲线 P-256
GenerateECDHKeyPairDeriveECDHSecret/DeriveECDHKeySHA256密钥协商,默认曲线 P-256

算法实际可用性受目标运行时和系统加密提供器影响,netstandard2.1 编译合同不等于全部算法在所有系统可运行。详细载荷、异常和参数限制见各方法 XML 注释;不在文档中输出密钥或真实加密数据。

异步重试的消费端写法

以下类型可加入面向 .NET 8/9/10、引用本页版本 Fast.IaaS 的类库。由调用方传入可取消的读取操作;工具不把任意操作变成幂等操作。

csharp
using Fast.IaaS;

public sealed class RetryingReader
{
    public async Task<string> ReadAsync(
        Func<CancellationToken, Task<string>> read,
        CancellationToken cancellationToken)
    {
        string result = "";
        await RetryUtil.InvokeAsync(
            async () => { result = await read(cancellationToken); },
            numRetries: 2,
            retryTimeout: 200,
            finalThrow: true,
            exceptionTypes: new[] { typeof(IOException) },
            cancellationToken: cancellationToken);
        return result;
    }
}

最多进行首次调用和两次重试;这里只重试 I/O 异常,最终失败继续抛出。取消必须同时传入实际 read 操作与重试器,才能覆盖读取及等待阶段。不要把扣款、发送通知或无幂等保证的写操作直接套用此示例。

来源与验证

依据 IaaS 源码重试实现树构造。本页覆盖模块及主要公开入口,不声称每个反射/加密重载已独立运行;本轮新增片段未编译。