Blazor Server环境下Radzen HTML Editor无法保存大文本问题求助
问题原因
该问题由Blazor Server的通信层限制导致:Blazor Server基于SignalR实现客户端与服务端的交互,默认单条消息最大接收大小为32KB,同时ASP.NET Core默认也存在请求体、表单提交的大小限制。当Radzen HTML Editor的内容(含HTML标签序列化后的总大小)超过限制后,消息传输被服务端拦截,导致OnChange事件收到的selectedValue为null,最终触发SignalR连接断开报错。
解决方案
1. 调整Blazor Server SignalR消息上限
在.NET 6+的Program.cs文件中添加如下配置,按需调大SignalR单条消息的最大接收大小,示例设置为10MB:
builder.Services.AddServerSideBlazor() .AddHubOptions(options => { options.MaximumReceiveMessageSize = 10 * 1024 * 1024; });
如果是.NET 5及更早版本,在Startup.cs的ConfigureServices方法中添加对应配置即可。
2. 调整服务端请求大小限制
如果存在直接提交大文本到接口的场景,同步调整Kestrel的最大请求体大小:
builder.WebHost.ConfigureKestrel(options => { options.Limits.MaxRequestBodySize = 20 * 1024 * 1024; });
如果页面/接口单独加了[RequestSizeLimit]特性,同步调大该特性的参数值即可。
3. 优化文本提交逻辑
- 取消使用Change事件实时提交全量文本,新增独立的保存按钮,点击时直接读取双向绑定的
Value变量做业务处理,减少大消息的传输频次 - 如必须实时保存,可在前端添加防抖逻辑,间隔3-5秒再提交修改,避免频繁触发大消息传输
4. 调整反向代理配置(如有)
部署时如果使用Nginx、IIS等反向代理,需要同步调整代理层的最大请求体限制:
- Nginx:在站点配置中添加
client_max_body_size 20M; - IIS:在web.config中添加如下配置:
<system.web> <httpRuntime maxRequestLength="20480" /> </system.web> <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="20971520" /> </requestFiltering> </security> </system.web>
验证
配置完成后测试不同长度的文本提交,确认大文本场景下selectedValue可正常获取,无连接断开报错即可。
内容的提问来源于stack exchange,提问作者Letoncse
相关产品推荐
相关产品推荐

