c# - Stackoverflow 样式 URL(自定义传出 URL)

标签 c# asp.net-mvc-3 url asp.net-routing

如果我导航到以下 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 并实现 GetRouteDataGetVirtualPath 来实现自定义路由对象> 方法,但我不知道从哪里开始(msdn 文档非常薄)。

所以我想知道的是:

  1. 有没有一种方法可以在不实现自定义路由的情况下实现这一目标?
  2. 如果没有,有人知道有什么好的资源可以帮助我开始实现自定义路由吗?
  3. 如果需要自定义路由实现,它如何获取可能必须从数据库加载的信息?让服务在路由中进行数据库调用是否可以(这对我来说似乎是错误的),或者信息是否可以通过 MVC 框架传递给路由?

最佳答案

其实很简单。由于标题只是出于 SEO 的原因,您不需要了解实际问题,因此问题 Controller (在 SO 情况下)将根据 id(在 URL 中)加载正确的问题并使用 301 重定向用户状态码。

您可以使用任何网络检查器看到此行为

enter image description here

关于c# - Stackoverflow 样式 URL(自定义传出 URL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15904213/

相关文章:

java - 尽管使用 method=post,提交的表单数据在 url 中可见

c# - 检查 List<List<int>> 是否包含 List<int>

c# - MVC C#TempData

c# - asp.net 身份表未创建

asp.net-mvc-3 - 如何在同一页面(列表/创建)MVC3 中使用@model IEnumerable<> 和@model <>

python - Django - url 结构

ruby-on-rails - Rails 在 URL 中隐藏 #anchor 标签

c# - 如何在 Asp.net 2.0 C# 中显示另存为对话框?

服务器验证后,jquery 对话框上的 jquery datepicker 将无法工作

asp.net-mvc-3 - CaSTLe Windsor Log4Net 问题