C# RESTful 接口开发实战:JSON解析、防注入与正则校验全流程

在开发 零点博客 系列的在线工具时,我深刻体会到一个优秀的接口开发规范对项目稳定性的影响。很多初学者在接手 PHP 后端转 C# 或者两者混合开发时,容易在JSON数据交互和SQL注入防护上踩坑。今天,我们就抛开虚的,结合实际源码案例,复盘一次完整的接口开发流程。

一、 接口架构设计:前后端分离的思路

不同于传统的页面渲染,现在的后端开发大多采用 API 形式返回数据。我们以一个获取用户数据的接口为例。为了保证灵活性,返回格式统一为 JSON,这也是前端开发最友好的数据结构。如果用 EMLOG 之类博客程序的 API,通常也是这种格式。

二、 后端核心逻辑:C# 实现与数据解析

在 C# 中,处理接收到的 JSON 数据通常需要依赖库(如 Newtonsoft.Json 或 System.Text.Json)。我们需要定义一个 DTO(数据传输对象)来承载数据。

// 简单的 DTO 定义
public class UserInfoDto
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Email { get; set; }
}

// 假设接收到前端发来的 JSON 字符串
string jsonString = "{\"Id\": 1, \"Username\": \"ZeroBlog\", \"Email\": \"test@test.com\"}";
UserInfoDto user = JsonConvert.DeserializeObject<UserInfoDto>(jsonString);

三、 安全第一:SQL注入防护与预处理语句

这是每个后端开发都必须刻在骨子里的常识。千万不要直接拼接 SQL 语句!我曾经遇到过开发人员直接把前端传进来的字符串拼进查询语句,结果被批量注入。MySQL 数据库的操作必须使用预处理语句。

using (SqlConnection conn = new SqlConnection("...连接字符串..."))
{
    string sql = "SELECT * FROM Users WHERE Username = @UserName";
    using (SqlCommand cmd = new SqlCommand(sql, conn))
    {
        // 关键点:使用参数化查询,而非直接拼接字符串
        cmd.Parameters.AddWithValue("@UserName", user.Username);

        conn.Open();
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                // 处理返回数据
            }
        }
    }
}

四、 数据校验:正则表达式的重要性

在接口开发中,接收到的数据往往是不可信的。对邮箱格式、用户名长度进行校验,能过滤掉大量无效请求。这里就用到了正则表达式。

// 校验邮箱格式
string emailPattern = @"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$";
Regex regex = new Regex(emailPattern);

if (!regex.IsMatch(user.Email))
{
    return Json(new { success = false, message = "邮箱格式错误" });
}

五、 高级话题:爬虫开发与数据清洗

作为零点博客的技术支持,我们也涉及一些爬虫开发工作。当通过接口抓取第三方网页数据时,返回的 HTML 往往包含大量杂乱标签。这就需要结合前端开发的知识,编写正则表达式提取出核心内容,比如提取文章标题或价格。

六、 总结与避坑指南

回顾这次开发,有几个避坑经验必须分享:

  • 类型安全:在反序列化 JSON 时,尽量定义强类型的对象,避免反序列化为字典再处理。
  • 全角半角:在拼接 SQL 或 HTML 时,注意全角半角问题,特别是 EMLOG 这类老系统的数据库。
  • 错误处理:接口开发中,除了返回成功状态码,完善的异常捕获(Try-Catch)能让你的接口在崩溃前优雅降级。

掌握这些底层逻辑,无论是做接口开发还是构建在线工具,你都能游刃有余。更多 C# 与 MySQL 的实战干货,欢迎持续关注 零点博客。

附:源码获取与扩展

上述代码片段是典型的小型 Web API 实现。如果你正在开发自己的博客系统或 CMS,理解这些步骤将让你受益匪浅。点击下方阅读原文,查看完整的 GitHub 源码。