Blazor Server中InputTextArea无法接收SQL查询输入的问题求助
解决Blazor Server中长SQL脚本绑定为null的问题
针对你遇到的EditForm绑定含敏感关键词的长SQL时FLOW.Query被设为null的问题,核心原因是ASP.NET Core请求验证拦截了潜在危险内容,加上默认模型绑定和SignalR消息大小限制导致的,以下是针对性解决方案:
1. 单个字段禁用请求验证并调整长度限制
在你的FLOW模型的Query属性上添加两个特性:
public class FLOW { [Required] // 绕过请求验证,允许包含SQL关键词的内容 [AllowHtml] // 设置最大长度为int最大值,适配长脚本 [MaxLength(int.MaxValue)] public string? Query { get; set; } }
[AllowHtml]:告诉ASP.NET Core不要将该字段的内容标记为潜在危险,避免被置为null。[MaxLength(int.MaxValue)]:覆盖默认的字符串长度限制,确保17000+字符的SQL脚本能被正确绑定。
2. 调整SignalR消息大小限制
Blazor Server通过SignalR传输表单数据,默认消息大小限制(约32KB)可能无法容纳长SQL脚本,需要在Program.cs中配置:
builder.Services.AddServerSideBlazor() .AddHubOptions(options => { // 根据实际需求设置,比如10MB options.MaximumReceiveMessageSize = 10 * 1024 * 1024; });
3. 可选:全局配置(不推荐,优先单个字段)
如果需要全局放宽验证(不建议,会降低安全性),可以在Program.cs中添加:
builder.Services.AddRazorPages() .AddMvcOptions(options => { // 全局禁用请求验证 options.Filters.Add(new IgnoreRequestValidationAttribute()); // 调整模型绑定的集合大小限制 options.MaxModelBindingCollectionSize = int.MaxValue; });
注意事项
禁用请求验证后,务必确保后续执行SQL时使用参数化查询,避免真正的SQL注入风险——虽然面向数据工程师,但安全措施不能少。
内容的提问来源于stack exchange,提问作者d.jazel
相关产品推荐
相关产品推荐

