在ASP.NET MVC中,你可以很容易地返回一个redirect的ActionResult: return RedirectToAction("Index"); or return RedirectToRoute(new { controller = "home", version = Math.Random() * 10 }); 这实际上会给HTTPredirect,通常很好。 然而,当使用谷歌分析这会引起大问题,因为原来的引用丢失,所以谷歌不知道你来自哪里。 这会丢失有用的信息,例如任何search引擎条款。 作为一个方面说明,这种方法的优点是消除可能来自广告系列的任何参数,但仍然允许我捕获它们的服务器端。 将它们留在查询string中会导致用户collections书签或推特或博客链接。 我已经多次看到人们纷纷指向包含广告系列ID的网站的链接。 无论如何,我正在写一个“网关”控制器的所有来访的网站,我可能会redirect到不同的地方或替代版本。 现在,我现在更关心Google(而不是偶然的书签),我希望能够发送访问/到他们将得到的页面,如果他们去/home/7 ,这是一个主页的版本7 。 就像我以前说过的如果我这样做,我失去了谷歌分析引荐的能力: return RedirectToAction(new { controller = "home", version = 7 }); 我真正想要的是一个 return ServerTransferAction(new { controller = "home", version = 7 }); 这将使我看到没有客户端redirect的观点。 我不认为这样的事情存在。 目前我能想到的最好的事情是在我的GatewayController.Index操作中复制HomeController.Index(..)的整个控制器逻辑。 这意味着我必须将'Views/Home'移动到'Shared'以便访问。 一定会有更好的办法??..
Server.Transfer和Response.Redirect什么区别? 各有什么优缺点? 什么时候适合于另一个? 什么时候不合适?