C# 调用 EMLOG 接口实战:手把手教你写安全的后端接口开发流程

大家好,我是零点博客的博主。前两天在折腾 C# 项目需要从 EMLOG 站点获取文章数据时,踩了不少坑,今天就来复盘一下这次后端接口开发实战的全过程。咱们不扯虚的,直接上代码和原理。

一、 业务背景与痛点分析

很多童鞋可能跟我一样,手里既有成熟的 C# 项目,又有 EMLOG 这种轻量级 PHP 博客。为了让 C# 系统能展示博客内容,我们需要一个桥梁。这个桥梁就是后端接口开发。

在这个场景下,核心需求是:C# 去读取 MySQL 中 EMLOG 的文章表,返回给前端。难点在于 EMLOG 并不直接暴露 API,我们需要自己写逻辑去拉数据。

二、 数据库连接与 SQL 注入防护(核心)

这是最关键的一步。直接拼接 SQL 字符串(例如 string sql = "select * from emlog_article where title='" + title + "'")是大忌!一旦有人输入特殊字符,数据库就挂了。

我的解决方案是使用 预处理语句。C# 的 SqlCommand 和 SqlParameter 配合 MySQL 驱动,能完美解决这个问题。

public List<ArticleModel> GetArticles()
{
    var list = new List<ArticleModel>();
    // 1. 使用 using 语句自动释放数据库连接,避免资源泄漏
    using (MySqlConnection conn = new MySqlConnection(connStr))
    {
        conn.Open();
        // 2. 编写 SQL 模板,注意 @Param 的写法
        string sql = "SELECT * FROM emlog_article WHERE gid > @LastGid ORDER BY gid ASC LIMIT 10";

        MySqlCommand cmd = new MySqlCommand(sql, conn);

        // 3. 添加参数,完全隔绝 SQL 注入风险
        cmd.Parameters.AddWithValue("@LastGid", lastGid);

        using (MySqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                list.Add(new ArticleModel
                {
                    Title = reader["title"].ToString(),
                    Content = reader["content"].ToString()
                });
            }
        }
    }
    return list;
}

看,这就是专业的写法。为了演示底层逻辑,我这里用的是原生 MySQL 驱动,如果你在用其他 ORM(如 Entity Framework),原理也是一样的:使用参数化查询来替换字符串拼接。

三、 JSON 数据的封装与解析

拿到数据后,我们需要把它变成前端能读懂的格式。在 .NET Core 中,直接将 C# 对象序列化为 JSON 是很轻松的。

// 使用 Newtonsoft.Json 或者 System.Text.Json
public IActionResult GetApi()
{
    var data = GetArticles(); // 调用上面的查询方法

    // 自动将 List<ArticleModel> 转化为 JSON 字符串
    // 底层涉及了 JSON/XML 数据解析 中的序列化过程
    return Ok(new { 
        code = 200, 
        msg = "success", 
        data = data 
    });
}

四、 接口开发中的正则表达式应用

有时候 EMLOG 的文章内容可能包含一些不需要的 HTML 标签,或者我们需要对返回的标题进行统一格式化(比如强制加锚点)。这时候就要用到正则表达式了。

我在接口开发中就经常写这类辅助方法,用来清洗数据:

/// <summary>
/// 简单的标题清洗,去除特殊符号
/// </summary>
public string CleanTitle(string title)
{
    if (string.IsNullOrEmpty(title)) return "无标题";
    // 匹配所有非中文字符,替换为空
    return Regex.Replace(title, @"[^一-龥a-zA-Z0-9]", "");
}

五、 避坑指南与总结

经过这次实战,有几个小建议送给大家:

  • 字符编码:C# 后端与 MySQL 交互时,一定要统一使用 UTF-8,否则中文会乱码。
  • CORS 跨域:如果你是纯后端接口,前端直接调用,记得配置允许跨域。
  • 代码复用:不要在每个接口里都写一遍数据库连接,封装一个通用的 DataAccess 类。

这套流程下来,从数据库查询到 JSON 输出,就是一个标准的后端接口开发实战闭环。如果你在写爬虫或者开发在线工具时也遇到了类似的问题,欢迎在评论区交流!我是零点博客,关注我,带你了解更多编程干货。