我有一个现有的 MVC 应用程序,我希望在其中使用 blazor 来满足某些特定要求。集成后,我意识到在应用程序的索引页面上,剃须刀组件工作正常,没有任何问题。但是当我移动到另一个页面时,它将失去 blazor hub 连接。我注意到这可能是一个映射问题,因为在主页上,
[appurl]/_blazor
工作并且连接得很好。但是当我转到另一个页面时,[appurl]/[controller]/_blazor
尝试连接,但抛出 404。
我怎样才能让它适用于应用程序上的所有路线?
根据您的信息,我猜测您缺少基本标签,或者您没有映射 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 导航到新页面。
我有类似的情况,ASP.NET Razor 页面 Web 应用程序并添加了 Blazor 页面,我们使用 Blazor 构建应用程序的管理部分,Blazor 页面位于 Areas/Admin 目录中。 路由问题可以通过修改 blazor _Host.cshtml 文件中的 @Page 指令来解决,您可以在其中使用 @Page 自定义路由为 blazor 页面设置路由,如下所示:
@page“/admin/{*page}”