我正在为 ETL 编写 Blazor 服务器端应用程序。我有一个包含 8 个字段的表单,其中之一是使用
<InputTextArea>
创建的文本区域。该字段用于剪切和粘贴电子表格、CSV 文件、HTML 表格等中的数据内容。
OnValidSubmit
的 <EditForm>
连接到 ProcessForm()
文件的 @code {}
部分中的 .razor
函数。
只要文本区域中的字符串少于 20,798 个字符,一切都可以正常工作。但是,当我将 20,798 个或更多字符粘贴到控件中时,提交会暂停(浏览器的内容被禁用),然后消息
An error has occurred. This application may no longer respond until reloaded. Reload"
出现在视口的页脚中。我正在 VS Code 中进行开发,终端窗口(或任何其他控制台窗口)中没有显示任何内容,包括我的 ProcessForm()
方法开头的日志记录语句。但是,浏览器的 JS 控制台上确实出现了消息 Error: Connection disconnected with error 'Error: Server returned an error on close: Connection closed with an error.'
。
我在底层 SignalR 技术中看到了对最大缓冲区长度的引用,但我在旧帖子中看到的用于设置更大缓冲区的方法似乎都与配置 Blazor 的新
.MapBlazorHub
方法兼容(并且无论如何,我希望能够处理任意大量的数据)。
有谁知道在这种情况下如何增加或删除数据大小限制?
我想这就是你所需要的。据我所知,32kb 是默认值。
services
.AddServerSideBlazor()
.AddHubOptions(options => { options.MaximumReceiveMessageSize = 32 * 1024; });
我今天遇到了这个问题。这是因为我尝试发送的消息超出了底层默认信号器限制(大约 32 KB)。
我找到了以下解决方案。
通过
MaximumReceiveMessageSize
增加 HubOptions
。默认值为 32 KB,但您可以按如下所示增加它:
builder.Services.AddServerSideBlazor()
.AddHubOptions(options =>
{
options.MaximumReceiveMessageSize = 1024; // KB
});
如果你想要没有限制,你可以将MaximumReceiveMessageSize设置为空值,如下所示:
builder.Services.AddServerSideBlazor()
.AddHubOptions(options =>
{
options.MaximumReceiveMessageSize = null; // No size limit
});
欲了解更多信息,您可以访问以下链接: