如何将.NET编写的邮箱验证API集成代码转换为.NET Core可用版本
问题原因
System.Web.Script.Serialization是.NET Framework专属API,.NET Core 已停止支持,需要替换为.NET Core默认的System.Text.Json序列化组件- 原代码反序列化时泛型参数类型写错,要反序列化到嵌套类
APIResults,却错误传入了外层类APIResult作为反序列化目标类型 - 额外优化点:原代码用
.Result同步阻塞调用异步方法容易引发死锁,建议改成异步方法,另外HttpClient不要每次请求都实例化,最好注册为单例复用
适配后的.NET Core完整代码
using System; using System.Collections.Generic; using System.Net.Http; using System.Text.Json; // 替换原来的System.Web.Script.Serialization using System.Threading.Tasks; namespace PermissionManagement.MVC { public class APIResult { private class APIResults { public int status { get; set; } public string info { get; set; } public string details { get; set; } } // 改成异步方法避免死锁,生产环境建议把HttpClient注入复用,不要每次实例化 public async Task Checkemail(string mail) { const string APIURL = "https://api.email-validator.net/api/verify"; // 注意:生产环境请不要每次new HttpClient,建议通过依赖注入注册IHttpClientFactory获取实例 using HttpClient client = new HttpClient(); string email = mail; string apiKey = "hidden"; var postData = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("EmailAddress", email), new KeyValuePair<string, string>("APIKey", apiKey) }; HttpContent content = new FormUrlEncodedContent(postData); HttpResponseMessage result = await client.PostAsync(APIURL, content); string resultContent = await result.Content.ReadAsStringAsync(); // 修复反序列化逻辑,指定正确的目标类型,配置忽略大小写匹配属性 APIResults res = JsonSerializer.Deserialize<APIResults>(resultContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); switch (res.status) { // 有效地址返回 {200, 207, 215} 状态码 // 114、118状态码需要重试 case 200: case 207: case 215: // 邮箱地址有效 // 215状态可重试更新catch-all状态 break; case 114: // 灰名单限制,等待5分钟后重试 break; case 118: // API调用频率超限,等待5分钟后重试 break; default: // 邮箱地址无效 // 可通过res.info、res.details获取错误详情 break; } } } }
额外说明
如果你的项目已经在使用Newtonsoft.Json(Json.NET),也可以替换反序列化逻辑为以下代码,需要提前安装Newtonsoft.Json Nuget包:
APIResults res = JsonConvert.DeserializeObject<APIResults>(resultContent);
内容的提问来源于stack exchange,提问作者amir chouika
相关产品推荐
相关产品推荐

