我们已经将应用程序从一台服务器移到了另一台服务器.这意味着拥有旧书签/链接的用户将不会使用正确的URL.

因此,我正在编写一个应用程序,它将捕获所有请求,并在显示有关移动的消息几秒钟后重定向(带有所有控制器和参数)到新位置.

我正在考虑将新URL存储在客户端的参数中,然后在几秒钟后使用JavaScript重定向. 我的问题是,使用控制器的所有请求都不会被捕获(控制器不存在于我的新应用程序中,但会在新服务器上的目标应用程序中存在).

那是.

Https://oldServer=>工作正常

https://oldServer/SomePage/SomeId/SomeId?someExtraValues=123 =未捕获

//Using a middleware
app.Use(async (context, next) =>
    {
        // how to capture all requests and write new URL to a parameter ?
        await next(context);
}

推荐答案

如果您想使用标准功能,比如提供视图,您可以try 使用所谓的通用路由(在文档herehere中对它们进行了一些介绍).例如,对于MVC应用程序:

app.MapControllerRoute(
    name: "default",
    pattern: "{*slug}",
    defaults: new {Controller="Home", Action="Index"});

将捕捉所有请求和服务Home/Index页.在最小的API中也支持相同的功能:

app.Map("/{*slug}", (HttpContext ctx) => ctx.Request.GetEncodedPathAndQuery());

如果你想直接给回复写信,那么你可以使用短路/终端中间件(在the middleware docs中搜索这个词).例如,Run delegate:

app.Run(async ctx =>
{
    await ctx.Response.WriteAsync(ctx.Request.GetEncodedPathAndQuery());
});

app.Run();

Csharp相关问答推荐

. NET 8 HttpClient post参数将其情况更改为camel'

哪个nuget包含SecurityStampValidatorOptions

在FilePath中搜索一个词,并根据First Match从左到右提取文件路径

如何使用C#Interop EXCEL创建度量衡

Nuget包Serilog.Sinks.AwsCloudwatch引发TypeLoadExceptions,因为父类型是密封的

如何在没有前缀和可选后缀的情况下获取Razor Page Handler方法名称?

方法从数据表中只 Select 一个条件?

为具有实体框架后端的Reaction项目 Select 正确的Visual Studio模板

如何让NLog停止写入冗余信息?

如何将FindAll()与Nuget包Interop.UIAutomationClient一起使用

异步等待Foreach循环中的ConfigureAWait(FALSE)执行什么操作?

WPF DataGrid文件名列,允许直接输入文本或通过对话框按键浏览

为什么ReadOnlySpan;T&>没有Slice(...)的重载接受Range实例的?

System.NotSupportdException:流不支持读取

RCL在毛伊岛应用程序和Blazor服务器应用程序.Net 8.0中使用页面

VS代码扩展无法在新版本扩展C#中运行从v2.10.28开始

获取应用程序版本信息时出现奇怪信息

外部应用&&的LINQ;左外部连接&类似于PostgreSQL的查询

C#LINQ多行条件

无法通过服务控制台启动.NET Core 6.0服务(错误1053)