如果我导航到以下 stackoverflow URL http://stackoverflow.com/questions/15532493
,它会自动附加问题的标题,如下所示:
http://stackoverflow.com/questions/15532493/mvc-custom-route-gives-404
也就是说,我可以在浏览器中输入不带问题标题的 URL,它会自动附加。
我将如何在我的应用程序中实现相同的结果?(注意:我知道问题标题不会影响呈现的页面)。
我有一个控制器调用Users
了一个名为Details
. 我定义了以下路线:
routes.MapRoute("UserRoute",
"Users/{*domain}",
new { controller = "User", action = "Details" },
new { action = "^Details$" });
由于这是一个 Intranet 应用程序,因此用户根据他们的 Windows 帐户进行身份验证。我想将域和用户名附加到 URL。
如果我像这样在视图中生成 URL:
@Html.ActionLink("Model.UserName", "Details", "User", new { domain = Model.Identity.Replace("\\", "/") })
我得到一个如下所示的 URL:
域/用户/ACME/jsmith
但是,如果用户使用浏览器导航栏导航到 URL Domain/Users/
,它会匹配路由并且用户会被带到用户详细信息页面。在这种情况下,我想将 附加ACME/jsmith/
到 URL 上。
到目前为止我所做的研究表明我可能必须通过派生RouteBase
和实现GetRouteData
andGetVirtualPath
方法来实现自定义路由对象,但我不知道从哪里开始(msdn 文档非常薄)。
所以我想知道的是:
- 有没有办法在不实现自定义路由的情况下实现这一点?
- 如果没有,是否有人知道任何好的资源可以让我开始实施自定义路线?
- 如果需要自定义路由实现,它如何获取可能必须从数据库加载的信息?让服务在路由中进行数据库调用是否可以(这对我来说似乎是错误的)或者信息可以通过 MVC 框架传递给路由吗?