我们已经将应用程序从一台服务器移到了另一台服务器.这意味着拥有旧书签/链接的用户将不会使用正确的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相关问答推荐

当Visual Studio处于升级管理模式时,无法安装Torch运行时

EF Core. Income和. AsNoTracking正确用法

为什么Blazor值在更改后没有立即呈现?

. NET在上一个操作完成之前,在此上下文实例上启动了第二个操作

我需要两个属性类吗

FileStream. FlushAsync()是否确保文件被写入磁盘?

在C#中,DirectoryEntry返回空AuditRules集合,即使审计规则确实存在

如何使用新的Microsoft.IdentityModel.JsonWebToken创建JwtSecurityToken?

System.Net.Http.HttpClient.SendAsync(request)在docker容器内的POST方法30秒后停止

使用可信第三方的Iext8.Net pdf签名

当用户右键单击文本框并单击粘贴时触发什么事件?

为什么无法将对象转换为泛型类型

如何使用XmlSerializer序列化带有CDATA节的XML文件?

TagHelpers在新区域不起作用

为值对象编写自定义JsonConverter

使用ASP.NET MVC for Lemon Squeezy X-Signature创建散列

使用未赋值的、传递的局部变量

KeyDown从我的文本框中删除输入,如何停止?

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

使用';UnityEngineering.Random.Range()';的IF语句仅适用于极高的最大值