diff --git a/Masuit.Tools.Abstractions.xml b/Masuit.Tools.Abstractions.xml index a6b6908..0892de3 100644 --- a/Masuit.Tools.Abstractions.xml +++ b/Masuit.Tools.Abstractions.xml @@ -4,22 +4,6 @@ Masuit.Tools.Abstractions - - - .net core的配置导入 - - - - - 配置对象 - - - - - 将配置添加到Masuit.Tools,若未调用,将自动加载默认的appsettings.json - - - 中文字符工具类 @@ -1050,6 +1034,26 @@ 值 + + + 添加或更新键值对 + + + + + 另一个字典集 + + + + + 添加或更新键值对 + + + + + 另一个字典集 + + 添加或更新键值对 @@ -1062,6 +1066,28 @@ 更新时的操作 + + + 添加或更新键值对 + + + + + 另一个字典集 + 更新时的操作 + + + + + 添加或更新键值对 + + + + + 另一个字典集 + 更新时的操作 + + 添加或更新键值对 @@ -1081,6 +1107,48 @@ 回调方法 + + + 安全的转换成字典集 + + + + + + 键选择器 + 值选择器 + + + + + 安全的转换成字典集 + + + + + + 键选择器 + 值选择器 + + + + + 转换成并发字典集合 + + + + + + + + + 转换成普通字典集合 + + + + + + 遍历IEnumerable @@ -3740,6 +3808,128 @@ 裁剪 + + + 默认MIME映射器,可以根据文件扩展名获取标准内容类型。 + + + + + 默认Mime - 如果没有找到任何其他映射则作为默认的Mime-Type + + + + + Mime + + + + + 扩展Mime + + + + + + + 根据扩展名获取mime type + + + + + + + 根据路径获取Mime Type + + + + + + + 默认MIME映射器,可以根据文件扩展名获取标准内容类型。 + + + + + 默认Mime - 如果没有找到任何其他映射则作为默认的Mime-Type + + + + + 在文件路径中搜索文件扩展名的默认正则表达式 + + + + + Mime类型与扩展名的映射字典(Content types) + + + + + mime类型与扩展名的映射关系 + + + + + + + + + + + + + + + + 扩展mime映射规则的标准列表。扩展的具有更高的优先级 - 如果扩展具有与标准项相同的扩展名,则会覆盖默认的mime + + + + + + + 返回特定文件扩展名的Content-Type,如果未找到任何对应关系,则返回默认值 + + + + + + + 返回特定文件扩展名的Content-Type,如果未找到任何对应关系,则返回默认值 + + + + + + + 根据路径获取MimeType + + + + + + + 获取扩展名 + + + + + + + + + + + + 扩展名 + + + + + MimeType + + 地理信息成分 @@ -5850,7 +6040,7 @@ 指定验证码的长度 验证码字符串 - + 创建验证码的图片 @@ -6248,3 +6438,9 @@ +iagnostics.Process.Id" /> 属性的 。- 或 -没有与此 对象关联的进程。- 或 -您正尝试为远程计算机上运行的进程调用 。此方法仅对本地计算机上运行的进程可用。 + 未能访问该等待设置。 + 命令参数无效,必须传入一个控制台能被cmd.exe可执行程序; 如:ping 127.0.0.1 + + + diff --git a/Masuit.Tools.Abstractions/Extensions/BaseType/IDictionaryExtensions.cs b/Masuit.Tools.Abstractions/Extensions/BaseType/IDictionaryExtensions.cs index b95ca76..f6efe3c 100644 --- a/Masuit.Tools.Abstractions/Extensions/BaseType/IDictionaryExtensions.cs +++ b/Masuit.Tools.Abstractions/Extensions/BaseType/IDictionaryExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.Collections.Generic; namespace Masuit.Tools @@ -28,6 +29,38 @@ namespace Masuit.Tools return @this[key]; } + /// + /// 添加或更新键值对 + /// + /// + /// + /// + /// 另一个字典集 + /// + public static void AddOrUpdate(this IDictionary @this, IDictionary that) + { + foreach (var item in that) + { + AddOrUpdate(@this, item.Key, item.Value); + } + } + + /// + /// 添加或更新键值对 + /// + /// + /// + /// + /// 另一个字典集 + /// + public static void AddOrUpdateTo(this IDictionary @this, IDictionary that) + { + foreach (var item in @this) + { + AddOrUpdate(that, item.Key, item.Value); + } + } + /// /// 添加或更新键值对 /// @@ -52,6 +85,40 @@ namespace Masuit.Tools return @this[key]; } + /// + /// 添加或更新键值对 + /// + /// + /// + /// + /// 另一个字典集 + /// 更新时的操作 + /// + public static void AddOrUpdate(this IDictionary @this, IDictionary that, Func updateValueFactory) + { + foreach (var item in that) + { + AddOrUpdate(@this, item.Key, item.Value, updateValueFactory); + } + } + + /// + /// 添加或更新键值对 + /// + /// + /// + /// + /// 另一个字典集 + /// 更新时的操作 + /// + public static void AddOrUpdateTo(this IDictionary @this, IDictionary that, Func updateValueFactory) + { + foreach (var item in @this) + { + AddOrUpdate(that, item.Key, item.Value, updateValueFactory); + } + } + /// /// 添加或更新键值对 /// @@ -88,5 +155,75 @@ namespace Masuit.Tools action(item.Key, item.Value); } } + + /// + /// 安全的转换成字典集 + /// + /// + /// + /// + /// + /// 键选择器 + /// 值选择器 + /// + public static Dictionary ToDictionarySafety(this IEnumerable source, Func keySelector, Func elementSelector) + { + var dic = new Dictionary(); + foreach (var item in source) + { + AddOrUpdate(dic, keySelector(item), elementSelector(item)); + } + + return dic; + } + + /// + /// 安全的转换成字典集 + /// + /// + /// + /// + /// + /// 键选择器 + /// 值选择器 + /// + public static ConcurrentDictionary ToConcurrentDictionary(this IEnumerable source, Func keySelector, Func elementSelector) + { + var dic = new ConcurrentDictionary(); + foreach (var item in source) + { + AddOrUpdate(dic, keySelector(item), elementSelector(item)); + } + + return dic; + } + + /// + /// 转换成并发字典集合 + /// + /// + /// + /// + /// + public static ConcurrentDictionary AsConcurrentDictionary(this Dictionary dic) + { + var cd = new ConcurrentDictionary(); + cd.AddOrUpdate(dic); + return cd; + } + + /// + /// 转换成普通字典集合 + /// + /// + /// + /// + /// + public static Dictionary AsDictionary(this ConcurrentDictionary dic) + { + var cd = new Dictionary(); + cd.AddOrUpdate(dic); + return cd; + } } } \ No newline at end of file diff --git a/Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj b/Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj index 75d060b..a128fa1 100644 --- a/Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj +++ b/Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj @@ -37,6 +37,7 @@ + diff --git a/Masuit.Tools.Core/AspNetCore/Mime/ContentType.cs b/Masuit.Tools.Abstractions/Mime/ContentType.cs similarity index 100% rename from Masuit.Tools.Core/AspNetCore/Mime/ContentType.cs rename to Masuit.Tools.Abstractions/Mime/ContentType.cs diff --git a/Masuit.Tools.Core/AspNetCore/Mime/DefaultMimeItems.cs b/Masuit.Tools.Abstractions/Mime/DefaultMimeItems.cs similarity index 100% rename from Masuit.Tools.Core/AspNetCore/Mime/DefaultMimeItems.cs rename to Masuit.Tools.Abstractions/Mime/DefaultMimeItems.cs diff --git a/Masuit.Tools.Core/AspNetCore/Mime/IMimeMapper.cs b/Masuit.Tools.Abstractions/Mime/IMimeMapper.cs similarity index 100% rename from Masuit.Tools.Core/AspNetCore/Mime/IMimeMapper.cs rename to Masuit.Tools.Abstractions/Mime/IMimeMapper.cs diff --git a/Masuit.Tools.Core/AspNetCore/Mime/MimeMapper.cs b/Masuit.Tools.Abstractions/Mime/MimeMapper.cs similarity index 72% rename from Masuit.Tools.Core/AspNetCore/Mime/MimeMapper.cs rename to Masuit.Tools.Abstractions/Mime/MimeMapper.cs index c1ad059..6523334 100644 --- a/Masuit.Tools.Core/AspNetCore/Mime/MimeMapper.cs +++ b/Masuit.Tools.Abstractions/Mime/MimeMapper.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Linq; using System.Text.RegularExpressions; namespace Masuit.Tools.AspNetCore.Mime @@ -20,14 +19,24 @@ namespace Masuit.Tools.AspNetCore.Mime private readonly Regex _pathExtensionPattern = new Regex("\\.(\\w*)$"); /// - /// Mime类型的默认字典(Content types) + /// Mime类型与扩展名的映射字典(Content types) /// - public static Dictionary MimeTypes { get; } + public static Dictionary MimeTypes { get; } = new Dictionary(); + + /// + /// mime类型与扩展名的映射关系 + /// + public static Dictionary ExtTypes { get; } = new Dictionary(); static MimeMapper() { - MimeTypes = DefaultMimeItems.Items.ToDictionary(item => "." + item.Extension, item => item.MimeType); + foreach (var item in DefaultMimeItems.Items) + { + MimeTypes.AddOrUpdate("." + item.Extension, item.MimeType); + ExtTypes.AddOrUpdate(item.MimeType, "." + item.Extension); + } } + /// /// /// @@ -55,14 +64,8 @@ namespace Masuit.Tools.AspNetCore.Mime { foreach (var mapping in extensions) { - if (MimeTypes.ContainsKey(mapping.Extension)) - { - MimeTypes[mapping.Extension] = mapping.MimeType; - } - else - { - MimeTypes.Add(mapping.Extension, mapping.MimeType); - } + MimeTypes.AddOrUpdate(mapping.Extension, mapping.MimeType); + ExtTypes.AddOrUpdate(mapping.MimeType, mapping.Extension); } } return this; @@ -80,6 +83,18 @@ namespace Masuit.Tools.AspNetCore.Mime return MimeTypes.ContainsKey(fileExtension) ? MimeTypes[fileExtension] : DefaultMime; } + /// + /// 返回特定文件扩展名的Content-Type,如果未找到任何对应关系,则返回默认值 + /// + /// + /// + public string GetExtensionFromMime(string mime) + { + mime = (mime ?? string.Empty).ToLower(); + mime = mime.Trim().StartsWith(".") ? mime.Replace(".", "") : mime; + return ExtTypes.ContainsKey(mime) ? ExtTypes[mime] : ""; + } + /// /// 根据路径获取MimeType /// diff --git a/Masuit.Tools.Core/AspNetCore/Mime/MimeMappingItem.cs b/Masuit.Tools.Abstractions/Mime/MimeMappingItem.cs similarity index 100% rename from Masuit.Tools.Core/AspNetCore/Mime/MimeMappingItem.cs rename to Masuit.Tools.Abstractions/Mime/MimeMappingItem.cs diff --git a/NetCoreTest/Program.cs b/NetCoreTest/Program.cs index c8f505d..891bd20 100644 --- a/NetCoreTest/Program.cs +++ b/NetCoreTest/Program.cs @@ -1,4 +1,6 @@ -using Masuit.Tools.Security; +using Masuit.Tools; +using Masuit.Tools.AspNetCore.Mime; +using Masuit.Tools.Security; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using System; @@ -10,6 +12,9 @@ namespace NetCoreTest { public static void Main(string[] args) { + MimeMapper.ExtTypes.AddOrUpdate(MimeMapper.MimeTypes); + var type = MimeMapper.ExtTypes.AsConcurrentDictionary()[".jpg"]; + Console.WriteLine(type); var rsaKey = RsaCrypt.GenerateRsaKeys(RsaKeyType.PKCS8, 2048); Console.WriteLine(rsaKey.PrivateKey); Console.WriteLine(rsaKey.PublicKey);