前言:零点博客的实战记录

大家好,我是零点博客的博主。前段时间为了解决站内内容更新不均衡的问题,我决定写一个 C# 小工具,直接对接 EMLOG 的 RSS/JSON 接口,把第三方优质内容同步到自己的博客里。过程中踩了不少坑,尤其是JSON解析和数据库写入安全的问题,今天特地整理成实战教程分享给大家。如果你也在做 C# 与 EMLOG 的结合开发,这篇干货绝对值得收藏。

一、需求拆解:从接口到数据库

我们的核心目标是:使用 C# 调用第三方 EMLOG 接口获取文章列表 -> 解析 JSON 数据 -> 过滤无效数据 -> 安全写入 MySQL。

这里我使用了 Newtonsoft.Json 库来处理 JSON,这是 C# 开发中最常用的工具,兼容性极强。

二、底层逻辑:如何安全解析接口数据

首先,我们需要一个标准的接口 URL。在 C# 中,HttpClient 是发送网络请求的主力。关键点在于 GetAsync 之后的数据反序列化。

public async Task<List<Article>> FetchArticles(string apiUrl)
{
    using (var client = new HttpClient())
    {
        // 发送 GET 请求,设置超时防止卡死
        var response = await client.GetAsync(apiUrl);
        response.EnsureSuccessStatusCode();

        // 获取字符串流
        var jsonString = await response.Content.ReadAsStringAsync();

        // 使用 Newtonsoft.Json 解析
        var json = JsonConvert.DeserializeObject<RootObject>(jsonString);
        return json.Data ?? new List<Article>();
    }
}

很多新手在这里容易忽略字符串编码,直接用 ReadToEnd 有时候会乱码,记得显式指定 UTF-8。

三、核心避坑:防止 SQL 注入的预处理语句

拿到 JSON 数据后,接下来就是存入 MySQL。这是最危险的一步。千万不要使用字符串拼接 SQL,这是 C# 开发的大忌!

我们一定要使用参数化查询(预处理语句)。这不仅性能更好,更是杜绝 SQL 注入的银弹。

string sql = "INSERT INTO emlog_articles (title, content, post_time) VALUES (@Title, @Content, @Time)";

using (var conn = new MySqlConnection(connString))
using (var cmd = new MySqlCommand(sql, conn))
{
    conn.Open();

    // 关键点:使用 AddWithValue,它会自动处理转义
    cmd.Parameters.AddWithValue("@Title", article.Title);
    cmd.Parameters.AddWithValue("@Content", article.Content);
    cmd.Parameters.AddWithValue("@Time", article.PostTime);

    int rows = cmd.ExecuteNonQuery();
    Console.WriteLine($"成功插入 {rows} 条数据");
}

看,代码写起来非常简洁,但安全性有了质的飞跃。

四、进阶技巧:正则表达式过滤脏数据

抓取回来的 JSON 里难免带有 HTML 标签或者多余的空格。这时候 C# 的正则表达式就是最好的清理工具。

例如,我们要把换行符替换成 HTML 的 <br>,或者去除多余的空白:

string cleanContent = Regex.Replace(rawContent, @"\s+", " ");
// 替换换行
cleanContent = Regex.Replace(cleanContent, "\r\n|\r|\n", "<br>");

五、总结与源码获取

整个开发过程其实就是 HTTP 请求、JSON 解析、SQL 操作这三者的串联。作为开发者,我们不仅要会写代码,更要懂安全。C# 强大的类型系统和 ADO.NET 库,能让我们在接口开发和数据存储之间游刃有余。

完整的源码案例、数据库建表语句以及 EMLOG 接口说明,我已经整理在零点博客的专栏里了,感兴趣的朋友可以去下载实操。如果你在开发中遇到具体的报错,欢迎在评论区留言,我会一一解答。