You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 12:45:02