更改 Blazor 文件夹会导致我“找不到后备端点”

Eho*_*ret 4 c# asp.net-core blazor blazor-server-side

我创建了一个默认的 Blazor 项目,并希望在同一项目中拥有一个 Web API 部分以用于原型设计。

因此,我将所有控制器和相关内容放在一个Api子文件夹中,并将 Blazor 内容放在一个Blazor子文件夹中。

项目结构:

- Api
  - Controllers
    - AController.cs
- Blazor
  - Pages
    - _Host.cshtml
    - Counter.razor
    - Error.razor
    - FetchData.razor
    - Index.razor
  - Data
    - WeatherForecast.cs
    - WeatherForecastService.cs
  - Shared
    - MainLayout.razor
    - NavMenu.razor
  - _Imports.razor
  - App.razor
- appsettings.json
- appsettings.Development.json
- Program.cs
- Startup.cs
Run Code Online (Sandbox Code Playgroud)

Startup.cs

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddHealthChecks();
        services.AddRazorPages();
        services.AddServerSideBlazor();
        services.AddSingleton<WeatherForecastService>();
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
        services.AddSwaggerGen(options =>
        {
            options.SwaggerDoc("v1", new OpenApiInfo
            {
                Title = "An API", 
                Version = "Version Yoohoo"
            });

            var xmlFileName = Assembly.GetExecutingAssembly().GetName().Name + ".xml";
            var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFileName);

            options.IncludeXmlComments(xmlPath);
        });
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

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

        app.UseSwagger();
        app.UseSwaggerUI(options => options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1"));
    }
}
Run Code Online (Sandbox Code Playgroud)

但现在启动应用程序时,出现以下异常:

处理请求时发生未处理的异常。InvalidOperationException:找不到路由值指定的后备端点:{ page: /_Host,area: }。Microsoft.AspNetCore.Mvc.RazorPages.Infrastruct.DynamicPageEndpointMatcherPolicy.ApplyAsync(HttpContext httpContext,CandidateSet 候选人)

我该如何解决这个问题?

Rya*_*yan 8

您还需要更改 Razor Pages 的默认根目录,尝试在启动时添加以下代码ConfigureServices

services.Configure<RazorPagesOptions>(options => options.RootDirectory = "/Blazor/Pages");
Run Code Online (Sandbox Code Playgroud)

  • 除此之外,我还发现您需要彻底清理构建(即删除 bin 和 obj 文件夹),否则仍然会出现相同的错误。 (2认同)