找不到由路由参数指定的备用终结点:{ page: /_Host, area: }。

18

我使用这个项目,并创建了一个与其完全相同的项目,但是遇到了以下问题:

无法找到由路由值指定的回退端点: { page: /_Host, area: }。

在启动时出现错误,在 startup 的 configure 方法中我有:

 app.UseEndpoints(endpoints =>
            {
                endpoints.MapBlazorHub();
                endpoints.MapDefaultControllerRoute();
                endpoints.MapFallbackToPage("/_Host");               
            });

如何解决这个错误?

8个回答

34
  1. 请确保您在 _Host.cshtml 文件的 <head /> 标签内声明了 <base href="~/" />
  2. 如果您自定义了 Pages 的位置,请确保在 Startup.cs 文件中的 ConfigureServices(IServiceCollection services) 方法中指定 services.Configure<RazorPagesOptions>(options => options.RootDirectory = "/Pages");
  3. 尝试删除 endpoints.MapDefaultControllerRoute();,并检查是否影响了您的路由。
  4. 请将 _Host.cshtml 文件放置在您的页面的 RootDirectory 中。
  5. 请确认您在 _Host.cshtml 文件顶部指定了 @page "/"@namespace <MatchingYourRootPagesDir>

我还在.csproj文件中注释掉了两个忽略_Host的部分:<!--<ItemGroup> <Content Remove="Pages\_host.cshtml" /> </ItemGroup> <ItemGroup> <None Include="Pages_Host.cshtml" /> </ItemGroup>--> - mz1378
2
RE 2:这也可以使用扩展方法进行配置,例如:services.AddRazorPages(options => options.RootDirectory = "/YOUR_FOLDER"); - derekbaker783
选项2解决了我的问题。如果您在布局cshtml文件中设置基本href,就不需要选项1。 - Leo

22

1
谢谢!但现在似乎破坏了热重载(使用dotnet watch run)。我完全困惑了...这个东西已经正常工作了两周,然后突然停止了(完全出乎意料),直到我添加了这个修复程序,现在热重载就不起作用了。 - Ruslan
不是正确的解决方案 - 它会破坏热重载。 - J.Hudler
也许这个解决方案已经不再需要了,因为在这个帖子中已经得到确认:https://github.com/dotnet/aspnetcore/issues/36535#issuecomment-924664575。 - azhe403
1
我在创建 .Net 7 新项目时也不得不这样做。 - Konrad Psiuk

7

在您的csproj文件中,确保使用Web SDK来使用.NET6。

<Project Sdk="Microsoft.NET.Sdk.Web">

另外,将此添加到您的属性组中:

  <PropertyGroup>
     <UseRazorSourceGenerator>false</UseRazorSourceGenerator>
  </PropertyGroup>

1
<Project Sdk="Microsoft.NET.Sdk.Web"> 这是真正的原因。 - Alexandra Sh

2

我在使用.NET 6 Blazor服务器项目时遇到了同样的问题,解决方法是正确设置ApplicationName,然后"Cannot find the fallback endpoint specified by route values: { page: /_Host, area: }"这个问题就解决了。

        var builder = WebApplication.CreateBuilder(
            new WebApplicationOptions()
            {
                ContentRootPath = @"..\Sources\MyProject",
                ApplicationName = "MyProject"
            });

1

我在 Rider 中遇到了这个问题。看起来是 MSBuild 版本错误: 文件-> 设置-> 构建、执行、部署-> 工具集和构建: “使用 MSBuild 版本: ” - 对于 dotnet 6 选择“17.0”或“自动检测(17.0)” (我的版本是15.0)。


0

加入这个修复了我的问题:(来自这里

<PropertyGroup>
    <UseRazorSourceGenerator>false</UseRazorSourceGenerator> //added this line.  
</PropertyGroup>

0

我正在使用Mudblazor,为了解决这个错误,我打开了带有sln文件的项目。

显然,在使用Visual Studio克隆项目后,它会将项目作为文件夹打开,因此,您必须选择项目中提到的文件以正确打开它。

注意:我是Visual Studio的新手...


0
这个方法解决了我的问题:我从另一个项目中复制了文件"_Host.cshtml",但忘记将文件属性中的"Build Action"从"None"更改为"Content"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接