如何拥有路由别名?

时间:2016-08-22 12:23:04

标签: asp.net-core asp.net-core-mvc asp.net-core-1.0 asp.net-core-middleware

我希望使用ASP.NET Core的别名来创建路由系统。

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

好的,我找到了答案!!

可以在上下文中编辑路径,如下所示: context.Request.Path = new PathString(newPath);

所以我使用MapWhen总是返回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);

答案 1 :(得分:0)

我认为你想在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.
});