在 Asp.Net 核心中间件中重定向

Redirecting in Asp.Net Core Middleware

我正在尝试学习如何在 Asp.NET 核心应用程序中执行 redirects/rewrites,我正在关注这篇文章:Back to Basics: Rewriting a URL in ASP.NET Core。但是,当我尝试“重写 URL”部分的示例时,我只看到主“/Index”页面,而不是“/TargetPage”。

我可以手动浏览到“/TargetPage”,它会呈现,但不会自动完成。我正在尝试这种 rewrite/redirect 方法,该方法基于将在程序的“appSettings.json”文件中设置的“标志”。

这是“Startup.cs”文件的代码:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseStaticFiles();
    app.UseRouting();

    app.Use(async (context, next) =>
    {
        string url = context.Request.Path.Value;

        if (!url.Contains("/TargetPage") && AppSettings.SendUserToTargetPage == true)
        {
            context.Request.Path = "/TargetPage";
        }

        await next();
    });

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

这是“_Host.cshtml”文件的代码:

@page "/"
@namespace MyTestApp.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
    Layout = null;
}
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
            
        <title>My Test Redirect</title>
            
        <base href="~/" />
            
        <link href="~/Styles/reset.css" rel="stylesheet" />
        <link href="~/Styles/bootstrap.min.css" rel="stylesheet" />
        <link href="~/Styles/site.css" rel="stylesheet" />
            
        
    </head>
    <body>
        <component type="typeof(App)" render-mode="Server" />
        <script src="_framework/blazor.server.js"></script>
    </body>
</html>

这是“/Index”页面的代码:

@page "/"

<h1>Hello, world!</h1>

Welcome to your new app.

这是“/TargetPage”的代码:

@page "/TargetPage"

<h3>The page I'm trying to get to.</h3>

应用程序启动后,我到达根“/”页面 (localhost:#some_port_number),其中“Hello, world!”显示并且 URL 永远不会像我期望的那样到达“/TargetPage”。

我是否缺少或配置错误的特定内容?此示例目前正在 .NET 5 中完成(如果它有任何影响的话)。

此致。

中间件用于 Razor Pages/MVC 应用程序。 Blazor 没有 HTTP 请求管道的概念,因此没有中间件。

对于 Blazor WASM,应用加载到浏览器中,代码在浏览器中执行。

在您使用 Blazor Server 的情况下,应用 运行 在服务器上,呈现的更新通过 SignalR 连接推送。

See: