如何在 ASP.NET Core MVC 应用程序中配置 Blazor Hub 映射

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

我有一个现有的 MVC 应用程序,我希望在其中使用 blazor 来满足某些特定要求。集成后,我意识到在应用程序的索引页面上,剃须刀组件工作正常,没有任何问题。但是当我移动到另一个页面时,它将失去 blazor hub 连接。我注意到这可能是一个映射问题,因为在主页上,

[appurl]/_blazor
工作并且连接得很好。但是当我转到另一个页面时,
[appurl]/[controller]/_blazor
尝试连接,但抛出 404。 我怎样才能让它适用于应用程序上的所有路线?

asp.net-core asp.net-core-mvc blazor blazor-server-side
2个回答
4
投票

根据您的信息,我猜测您缺少基本标签,或者您没有映射 BlazorHub。 如果您愿意,例如 Blazor 处理 /app/* 下的所有 URL,而其他 URL 由 MVC 处理,那么您的端点需要如下配置:

app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
                endpoints.MapBlazorHub();
                endpoints.MapFallbackToPage("/app/{*page}", "/_Host");
            });

在你的

_Host.cshtml
中你必须添加
<base href="/app" />

如果没有

endpoints.MapBlazorHub();
,您的组件将被渲染,但您将无法连接到 Blazor 服务器,并且如果没有
<base href="/app" />
,浏览器将执行完整页面重新加载,而不是使用 Blazor 导航到新页面。


0
投票

我有类似的情况,ASP.NET Razor 页面 Web 应用程序并添加了 Blazor 页面,我们使用 Blazor 构建应用程序的管理部分,Blazor 页面位于 Areas/Admin 目录中。 路由问题可以通过修改 blazor _Host.cshtml 文件中的 @Page 指令来解决,您可以在其中使用 @Page 自定义路由为 blazor 页面设置路由,如下所示:

@page“/admin/{*page}”

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