Razor Pages 应该只监听特定的路由

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

我有一个具有现有 FastEndpoints REST API 的项目。没什么特别的,几乎是默认配置:

app.UseFastEndpoints(x => {
    x.Endpoints.Configurator = definition => {
        definition.Description(desc => desc.ProducesProblemFE<CommonErrorResponse>(500));
        definition.Description(desc => desc.ProducesProblemFE<ErrorResponse>());
    };
    x.Endpoints.Filter = ep => true;
});

现在我想添加 Duende IdentityServer,我想这并不重要,因为真正的问题是这个包的 Razor 页面。再说一遍,没什么特别的:

builder.Services.AddRazorPages();

现在的问题是,Razor 页面优先于 REST API。这意味着,如果我想转到

GET users/self
,我会看到一个剃刀页面,而不是正确的数据或 HTTP 错误。

所以我想做的是以下其中一项:

  • 将 Razor 配置为仅侦听特定路由
  • 配置 FastEndpoints 以覆盖 Razor 的路由设置

我在这两个框架上都找不到任何东西(只有 MVC 的解决方案),所以我在这里问:我该怎么做?

razor duende-identity-server fast-endpoints
1个回答
0
投票

以下中间件顺序似乎有效:

var bld = WebApplication.CreateBuilder(args);
bld.Services
   .AddFastEndpoints()
   .AddRazorPages();

var app = bld.Build();

if (!app.Environment.IsDevelopment())
    app.UseExceptionHandler("/Error");

app.UseRouting()
   .UseAuthorization()
   .UseFastEndpoints();
app.MapStaticAssets();
app.MapRazorPages()
   .WithStaticAssets();
app.Run();

测试终点:

sealed class TestEndpoint : EndpointWithoutRequest
{
    public override void Configure()
    {
        Get("test");
        AllowAnonymous();
    }

    public override async Task HandleAsync(CancellationToken c)
    {
        await SendAsync("hello...");
    }
}

/test
发出 get 请求会显示以下 api 响应:

GET http://localhost:5234/test

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Wed, 08 Jan 2025 17:34:24 GMT
Server: Kestrel
Transfer-Encoding: chunked

"hello..."

Response code: 200 (OK); Time: 3ms (3 ms); Content length: 10 bytes (10 B)
© www.soinside.com 2019 - 2024. All rights reserved.