在 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:
我正在尝试学习如何在 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: