如果我导航到以下 stackoverflow URL http://stackoverflow.com/questions/15532493
,它会自动附加问题的标题,如下所示:
http://stackoverflow.com/questions/15532493/mvc-custom-route-gives-404
也就是说,我可以在浏览器中输入 URL 而不问题标题,它会自动附加。
我将如何在我的应用程序中实现相同的结果? (注意:我知道问题标题不会影响呈现的页面)。
我有一个名为 Users
的 Controller ,它有一个名为 Details
的操作方法。我定义了以下路线:
routes.MapRoute("UserRoute",
"Users/{*domain}",
new { controller = "User", action = "Details" },
new { action = "^Details$" });
由于这是一个 Intranet 应用程序,因此用户根据其 Windows 帐户进行身份验证。我想将域和用户名附加到 URL。
如果我像这样在 View 中生成 URL:
@Html.ActionLink("Model.UserName", "Details", "User", new { domain = Model.Identity.Replace("\\", "/") })
我得到一个如下所示的 URL:
Domain/Users/ACME/jsmith
但是,如果用户使用浏览器导航栏导航到 URL Domain/Users/
,它与路由匹配,用户将被带到用户详细信息页面。在这种情况下,我想将 ACME/jsmith/
附加到 URL。
到目前为止,我所做的研究表明我可能必须通过派生自 RouteBase
并实现 GetRouteData
和 GetVirtualPath
来实现自定义路由对象> 方法,但我不知道从哪里开始(msdn 文档非常薄)。
所以我想知道的是:
- 有没有一种方法可以在不实现自定义路由的情况下实现这一目标?
- 如果没有,有人知道有什么好的资源可以帮助我开始实现自定义路由吗?
- 如果需要自定义路由实现,它如何获取可能必须从数据库加载的信息?让服务在路由中进行数据库调用是否可以(这对我来说似乎是错误的),或者信息是否可以通过 MVC 框架传递给路由?
最佳答案
其实很简单。由于标题只是出于 SEO 的原因,您不需要了解实际问题,因此问题 Controller (在 SO 情况下)将根据 id(在 URL 中)加载正确的问题并使用 301 重定向用户状态码。
您可以使用任何网络检查器看到此行为
关于c# - Stackoverflow 样式 URL(自定义传出 URL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15904213/