Blazor(服务器端)TextArea 因长字符串而失败

问题描述 投票:0回答:2

我正在为 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
方法兼容(并且无论如何,我希望能够处理任意大量的数据)。

有谁知道在这种情况下如何增加或删除数据大小限制?

signalr blazor blazor-server-side
2个回答
7
投票

我想这就是你所需要的。据我所知,32kb 是默认值。

services
    .AddServerSideBlazor()
    .AddHubOptions(options => { options.MaximumReceiveMessageSize = 32 * 1024; });

0
投票

我今天遇到了这个问题。这是因为我尝试发送的消息超出了底层默认信号器限制(大约 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
                });

欲了解更多信息,您可以访问以下链接:

连接关闭错误并尝试重新连接

增加 Blazor SignalR 最大消息大小

© www.soinside.com 2019 - 2024. All rights reserved.