无法将路由添加到 Blazor 服务器端

Posted

技术标签:

【中文标题】无法将路由添加到 Blazor 服务器端【英文标题】:Can't add Route to Blazor Server Side 【发布时间】:2021-07-01 12:55:03 【问题描述】:

我会尝试通过以下方式注册路由

services.AddRazorPages(options => options.Conventions.AddPageRoute("/counter", "/c"));

ConfigureServices.

我不能只添加@page "/c",因为我打算从配置文件中提取这些地址。

但是,当我尝试访问.../c 时,它说找不到该页面,.../counter 有效。可能是什么问题?

【问题讨论】:

Counter.razor 文件中提到@page 的内容是什么? @viveknuna @page "/counter",我使用默认的 blazor 项目来重现这个。 那你为什么期望它与.../c一起工作? 因为我添加了一个 PageRoute,它应该从 c 重定向到 counter。 docs.microsoft.com/en-us/aspnet/core/razor-pages/… 还是我误会了? 到底要不要动态生成资源?例如生成一个语音室,然后提供一个链接?你可能想看看this 【参考方案1】:

你可能有充分的理由诉诸AddPageRoute,但你没有说,所以你为什么不这样做:

@page "/counter"
@page "/c"
@page "/co"
@page "/cou"

<h1>Counter</h1>

与 Razor 不同,Blazor 采用多个 @page 指令。

【讨论】:

是的,这可以解决,但我打算从配置文件中提取这些地址,所以我不能静态设置它们。我还编辑了问题文本以包含此信息【参考方案2】:

RazorPages != Blazor。

您的路线不适用于 Blazor 页面。

当原始模板代码中有.AddRazorPages() 时,那是来自使用个人帐户。您可以通过这种方式为登录、注销和帐户页面添加路由。不适用于 /Counter。

【讨论】:

【参考方案3】:

我想从配置文件中加载地址并从这个地址重定向到静态页面

我为你做了一个演示:

@page "/"
@inject NavigationManager NavigationManager
@inject Microsoft.Extensions.Configuration.IConfiguration config

<button class="btn-primary" @onclick="RedirectTo">Go</button>

@code 
    void RedirectTo()
    
        var address = @config["address"];
        NavigationManager.NavigateTo(address);
    

//Use this if you want to redirect immediately without some trigger event
    protected override void OnInitialized()
    
        var address = @config["address"]; //get address from config file
        NavigationManager.NavigateTo(address); //redirect
    

以 appsettings.json 中的地址配置为例:


  "address": "/counter",
  "Logging":...,
  "AllowedHosts": "*"

【讨论】:

好的,但这仍然没有多大意义。你的例子有效。我假设您想更改@page 指令以包含来自配置的一些数据,但是如何?在您的示例中,您只是导航到计数器。

以上是关于无法将路由添加到 Blazor 服务器端的主要内容,如果未能解决你的问题,请参考以下文章

如何向服务器端 Blazor 项目添加控制器(而非视图)支持

如何通过 IdentityServer4 将 OpenId Connect 添加到 ASP.NET Core 服务器端 Blazor Web 应用程序?

添加第二个 EF 核心数据库后 Blazor 服务器端 docker 容器分段错误

自定义脚本在 Blazor 服务器端工作错误

.net Core 的实体框架 6。在 Blazor 服务器端

内容 JS 文件的 Blazor 服务器端 MIME 类型错误