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

ASP.NET Core 7.0中如何正常输出数据库查询的用户名列表?

问题解决方法

核心原因

你直接将List<string>类型的集合赋值给ViewData["vuln"],前端渲染时默认调用了集合的ToString()方法,所以输出的是集合的类型全称而非具体内容。

方案一:后端拼接成字符串再传递

在控制器中,把查询得到的用户名列表用换行符拼接成单个字符串,再赋值给ViewData:

// 假设已经通过查询获取到List<string> userNameList
ViewData["vuln"] = string.Join(Environment.NewLine, userNameList);

前端textarea直接读取ViewData["vuln"]即可按每行一个用户名显示。

方案二:前端遍历集合渲染

如果希望在前端处理集合,需要在Razor视图中把ViewData["vuln"]强制转换为List<string>后遍历:

<textarea rows="10" cols="50">
@foreach (var name in ViewData["vuln"] as List<string>)
{
    @name
    @Environment.NewLine
}
</textarea>

关键安全提示

目前你用拼接SQL的方式查询存在严重的SQL注入风险,必须改用参数化查询。以下是ADO.NET参数化查询的示例:

string input = "用户输入的字符"; // 从请求中获取的输入值
string connectionString = "你的数据库连接字符串";
var userNameList = new List<string>();

using (var conn = new SqlConnection(connectionString))
{
    conn.Open();
    // 使用参数化查询避免注入,空输入时返回所有用户名
    string sql = "SELECT UserName FROM Users WHERE UserName LIKE @Input OR @Input = ''";
    using (var cmd = new SqlCommand(sql, conn))
    {
        cmd.Parameters.AddWithValue("@Input", $"%{input}%");
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                userNameList.Add(reader.GetString(0));
            }
        }
    }
}
// 再将处理后的列表传递给前端
ViewData["vuln"] = string.Join(Environment.NewLine, userNameList);

参数化查询会自动处理输入中的特殊字符,彻底规避SQL注入风险。

内容的提问来源于stack exchange,提问作者awefwefwv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:55:14