如何拥有路由别名?

How to have routes aliases?

我正在寻找使用 ASP.NET 核心的别名创建路由系统。

在我的数据库中,我的所有路由都带有相应的别名,当用户请求服务器时,我的应用会查找与别名对应的路由。

现在,我想使用恢复的路由访问正确的控制器和正确的操作。

举个例子比长篇大论更明确(括号里是我想做的):

用户连接到myapp。com/hello/i/am/an/alias -> 应用找到相应的路由/MyController/Index( -> 应用使用MyController 将Index 视图发送给用户)

如果有人知道怎么做,我采纳:D 谢谢

编辑:实际上,编辑 HttpContext 会更好,但我认为这是不可能的

我想你会想要 运行 在 Startup.cs

的 Configure 方法中做这样的事情
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "path1",
        template: "hello/i/am/an/alias",
        defaults: {controller="MyController", action="Index"});

    routes.MapRoute(
        name: "path2",
        template: "i/am/another/alias",
        defaults: {controller="MyOtherController", action="Index"});

    // etc.
});

好的,我找到答案了!!

可以像这样在上下文中编辑路径: context.Request.Path = new PathString(newPath);

所以我使用了 MapWhen,它总是 return true 并使用数据库的响应编辑 context.Request.Path,而 mapHandler 只需调用 app.UseMvc:

private void HandleMap(IApplicationBuilder app)
    {
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

app.MapWhen(context => {
            string newPath = findNewPath();

            context.Request.Path = new PathString(newPath);

            return true;
        }, HandleMap);