如果连接不处于“已连接”状态,Blazor 服务器无法发送数据

Hir*_*ndo 5 c# razor asp.net-core blazor blazor-server-side

在我的 Blazor 项目中,我使用两个_Host.cshtml文件。第一个是默认_Host.cshtml文件。另一种用于授予对特定.razor页面的匿名登录访问权限。假设匿名剃刀页面是x.razor

X.剃刀

@page '\PublicRazor\x'
...
Run Code Online (Sandbox Code Playgroud)

第一个场景

我将在不登录的情况下访问x.razor页面。在这种情况下,中的所有功能都x.razor不起作用(例如按钮单击、表单验证)。当我检查开发者控制台时,我看到了这个 在此输入图像描述

第二个场景

x.razor登录 blazor 应用程序后我将转到页面。在这种情况下,所有功能都x.razor可以正常工作。并且开发者控制台没有任何错误。

为什么会发生这种情况?如何使x.razor所有功能进入工作状态?

默认_Host.cshtml

@page "/"
@using Microsoft.AspNetCore.Authorization
@namespace has.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@attribute [Authorize]
@{
    Layout = null;
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>has</title>
    <base href="~/" />
    <link href="_content/Blazor.ContextMenu/blazorContextMenu.min.css" rel="stylesheet" />
    <script src="~/js/site.js"></script>
</head>
<body>
    <app>
        <component type="typeof(App)" render-mode="Server" />
    </app>

    <script src="_framework/blazor.server.js"></script>
    <script src="_content/Blazor.ContextMenu/blazorContextMenu.min.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

其他_Host.cshtml(用于给予匿名访问x.razor

@page "/publicrazor"
@using Microsoft.AspNetCore.Authorization
@namespace has.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@attribute [AllowAnonymous]
@{
    Layout = null;
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>has</title>
    <base href="~/publicrazor" />
    <link href="_content/Blazor.ContextMenu/blazorContextMenu.min.css" rel="stylesheet" />
    <script src="~/js/site.js"></script>
</head>
<body>
    <app>
        <component type="typeof(PublicApp)" render-mode="ServerPrerendered" />
    </app>

    <script src="_framework/blazor.server.js"></script>
    <script src="_content/Blazor.ContextMenu/blazorContextMenu.min.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

启动.cs

app.UseEndpoints(endpoints =>
    {
       endpoints.MapControllers();
       endpoints.MapBlazorHub();
       endpoints.MapFallbackToPage("/_Host");
       endpoints.MapFallbackToPage("~/PublicRazor/{**segment}", "/PublicRazor/_Host");
    });
Run Code Online (Sandbox Code Playgroud)

小智 0

如上所述,该错误并不是有趣的错误。为了找到有趣的错误,您必须打开DetailedErrors并且可以在appsettings.Development.json文件中执行此操作。

{
  "DetailedErrors": true,
  ... the rest of your settings here
}
Run Code Online (Sandbox Code Playgroud)

一旦您打开此功能并重新启动应用程序,浏览器控制台应该会显示触发此模糊错误的根本原因错误。