我想具有比/ {控制器} / {操作} / {ID}。

更短的网址

例如,我想{控制器} / {ID},其中,{ID}是字符串。

这将允许简单的路径,例如用户/用户名,网页/网页,新闻/ Newsname。我喜欢这个不是要求的URL(用户/细则/用户名),其是用于最终用户较少优雅。

的/详细动作更好

我可以很容易地通过用于我想要这个水平为简单的任何控制器设置定制路由使这项工作。然而,这会导致头痛,当谈到执行其他操作,如{控制器} / {行动},其中{操作} =“创建”,因为,在这种情况下使用字符串{ID}字符串{操作}冲突。

我的问题:我怎么能有“保留”的话,那么,如果URL是/新闻/创建,它是作为一个动作处理,但如果该URL为别的,例如/新闻/ A-大猩猩吃-MY-论文,那么它被视为一个ID。

我希望建立我的路由时,我可以定义呢?

更新

使用本格里斯沃尔德的回答,我已经更新了默认的ASP.NET MVC的路线是:

    routes.MapRoute(
    "CreateRoute",                                            // route name
    "{controller}/Create",                                    // url with parameters
    new { action = "Create" }                                 // parameter defaults
);

routes.MapRoute(
    "DetailsRoute",                                           // route name
    "{controller}/{id}",                                      // url with parameters
    new { action = "Details" }                                // parameter defaults
);

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

这工作的魅力和手段,在默认情况下,详细页面将使用简化的URL,但我将仍然能够针对特定的动作,如果我想(更新/删除/详细信息)。

当然,你需要禁止保留的“创建”字作为标识,否则,用户可以尝试创建一个文章,例如,名称为“创建”,可不能被访问。

这是非常好的。如果有人认为这有什么不对的这种做法,帮腔,但我喜欢它这么远。

有帮助吗?

解决方案

我想你留下了创建为每个保留字路线。例如,

routes.MapRoute("CreateRoute",
               "{controller}/Create",
                new { action = "Create" }
            );

将处理/新闻/创建,/用户/创建,等,只要这条线路的其他自定义路由上市之前,我觉得你覆盖。

我想你将需要为各种CRUD操作另外的路线将遵循类似的模式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top