如果我导航到以下stackoverflow网址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("\\", "/") })
我得到一个如下所示的网址:
域/用户/ ACME / jsmith的
但是,如果用户使用浏览器导航栏导航到URL Domain/Users/
,则它会匹配路径,并且用户将进入用户详细信息页面。在这种情况下,我想将ACME/jsmith/
附加到网址上。
到目前为止我所做的研究表明,我可能必须通过派生RouteBase
并实施GetRouteData
和GetVirtualPath
方法来实现自定义路由对象,但我不知道在哪里从这开始(msdn documentaiton很薄)。
所以我想知道的是:
答案 0 :(得分:3)
实际上非常简单。由于标题只是出于搜索引擎优化的原因,你不需要得到实际的问题,所以问题控制器(在这种情况下)将根据id(在URL中)加载正确的问题,并用301重定向用户状态代码。
您可以使用任何Web检查器
查看此行为
答案 1 :(得分:1)
你可以使用Javascript在客户端进行:
history.pushState({}, /* Title Here */, /* URL Here */ );
唯一的缺点是并非所有浏览器都支持它。