如何让 Blazor 页面刷新页面而不是在连接丢失时尝试重新连接?

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

我尝试搜索答案并找到了很多答案,但这些答案适用于旧版本的.Net 框架。我用的是6.0.3。

我的第一个方法是找到连接丢失时调用的函数或过程,尝试覆盖 _Layout.cshtml 文件中的默认重新连接函数,并在各个论坛上找到了许多解决方案,但这些解决方案在我的情况下根本不起作用。

请不要伤害我,我什至不是开发人员,但设法实现了所有功能。这是最后需要的东西。

blazor refresh reconnect
2个回答
2
投票

查看有关修改重新连接处理程序的 Blazor 文档。它包括一个处理程序,用于处理连接何时断开以及重新连接的情况。您可能可以修改他们的示例以调用 location.reload() 而不是登录到控制台。只需确保您的应用程序不会陷入对 Websockets 支持已损坏的客户端的无限循环中(如果由于某种原因它们可以连接,但始终立即断开连接)。


0
投票

这符合我的目的。我通常使用

dotnet watch run
进行热重载,并允许
always
进行粗鲁退出。我发现等待缓慢的重新连接尝试令人沮丧,而如果出现粗鲁退出,应用程序将重建,并且也不认为用户体验对他们来说看到“重新加载”链接有好处。

我必须逆向分析已编译的打字稿才能弄清楚这一点:TypeScript 源代码

ReconnectionDisplay
(DefaultReconnectionDisplay source) 在实现中初始化;我找不到任何干净的方法来访问替换方法:

  • show()
  • hide()
  • update(currentAttempt: number)
  • failed()
  • rejected()

这种无限重新加载尝试的方法使我不会最终进入“无法访问网站”页面。当服务器重新上线并且服务器上的状态丢失时,

rejected
方法似乎会被调用,而不是尝试超时。减少重试间隔似乎也有助于更快地刷新页面。

我调用

defaultReconnectionHandler.onConnectionDown
的原因是
_reconnectionDisplay
在该方法中构造并分配,然后我替换
rejected
调用。我认为在每次迭代中重新分配
rejected
调用并不是最好的方法,但它的占用空间足够小,迭代不频繁,并且会被垃圾收集。

不要忘记禁用

autostart
,否则您会收到一条错误消息,告诉您 Blazor 已在运行。

<script src="_framework/blazor.server.js" autostart="false"></script>
<script type="text/javascript">
    Blazor.start({
        reconnectionOptions: {
            maxRetries: Infinity,
            retryIntervalMilliseconds: 100
        },
        reconnectionHandler: {
            onConnectionDown: (options, error) => {
                Blazor.defaultReconnectionHandler.onConnectionDown(options, error);
                Blazor.defaultReconnectionHandler._reconnectionDisplay.rejected = function () {
                    window.location.reload();
                }
            }
        }
    });
</script>
© www.soinside.com 2019 - 2024. All rights reserved.