C# 实现 EMLOG 后端接口:MySQL数据库 防注入与 JSON 数据解析实战

大家好,我是零点。在构建技术博客系统时,很多站长喜欢使用 EMLOG 这类轻量级 CMS。但对于开发者来说,它的默认 PHP 后端有时候不够用,或者扩展性受限。前几天我就在折腾,想用 C# 写一套后端接口,去读取零点博客 EMLOG 的文章数据,然后喂给前端页面展示。

在这个过程中,我对 MySQL数据库 的操作深度挖掘了一把。今天就把这个实战过程复盘一下,特别是关于 SQL注入 防护和 JSON 数据处理这块,全是干货,建议收藏。

一、 开发背景:为什么要在 C# 里玩 EMLOG

EMLOG 默认是 PHP+MySQL 的架构,但为了做个独立的前后端分离 Demo,我直接切成了 C# Web API。痛点在于,我们需要实时从 EMLOGMySQL数据库 里把文章拿出来,转成 JSON 格式给前端调用。如果你直接拼接 SQL 语句,稍微不注意就会出大问题。

二、 核心难点:SQL注入 防护与预处理语句

这绝对是新手最容易翻车的地方。比如我们要查 ID 为 5 的文章:

string sql = "SELECT * FROM emlog_article WHERE gid = " + gid;

如果这里的 gid 是用户输入的(比如 URL 传参),恶意用户就能跑出所有数据。所以,在 MySQL数据库 操作中,预处理语句是必须的。

C# 中,我们可以使用 MySqlCommand 配合 Parameters.AddWithValue

string connStr = "Server=localhost;Database=emlog_db;Uid=root;Pwd=123456;charset=utf8mb4;";
string sql = "SELECT title, content FROM emlog_article WHERE gid = @gid";

using (MySqlConnection conn = new MySqlConnection(connStr))
{
    conn.Open();
    using (MySqlCommand cmd = new MySqlCommand(sql, conn))
    {
        // 核心:使用参数化查询,自动进行 SQL注入 防护
        cmd.Parameters.AddWithValue("@gid", 5);

        using (MySqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                // 读取数据逻辑
            }
        }
    }
}

三、 实战:解析 MySQL 数据并转为 JSON

读出来只是第一步,我们最终要给前端的是一个干净的 JSON 对象。在 C# 里,简单的手动拼接 JSON 比较累,我们可以利用 Newtonsoft.Json 库来快速搞定。

下面是一个完整的示例,模拟从 MySQL数据库 拉取文章列表并返回 JSON:

[HttpGet]
[Route("api/getArticle")]
public JsonResult GetArticle()
{
    // 1. 准备 JSON 结构体
    var result = new { code = 200, msg = "success", data = new List<object>() };

    // 2. 数据库连接与查询
    using (var conn = new MySqlConnection(connStr))
    {
        conn.Open();
        var sql = "SELECT gid, title, comments FROM emlog_article ORDER BY date DESC LIMIT 10";
        using (var cmd = new MySqlCommand(sql, conn))
        {
            using (var reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    // 3. 封装数据对象
                    var item = new
                    {
                        id = reader.GetInt32("gid"),
                        title = reader.GetString("title"),
                        comments = reader.GetInt32("comments")
                    };

                    // 4. 加入列表
                    result.data.Add(item);
                }
            }
        }
    }

    // 5. 返回 JSON
    return Json(result);
}

四、 建站避坑指南

在本地测试没问题,上生产环境(或者遇到中文乱码)时,一定要注意两点:

  • 字符编码:连接字符串里一定要加上 charset=utf8mb4,否则 MySQL数据库 存的中文在 C# 读出来会乱码,JSON 传输也就废了。
  • 连接池C# 的 MySqlConnection 默认是支持连接池的,不要在循环里反复 new 连接,性能损耗很大。

写代码就是这样,细节决定成败。希望通过这篇关于 C#EMLOG 的实操,能帮大家解决后端开发的难题。