相关疑难解决方法(0)

如何在ASP.NET MVC中模拟Server.Transfer?

在ASP.NET MVC中,您可以非常轻松地返回重定向ActionResult:

 return RedirectToAction("Index");

 or

 return RedirectToRoute(new { controller = "home", version = Math.Random() * 10 });
Run Code Online (Sandbox Code Playgroud)

这实际上会提供HTTP重定向,这通常很好.但是,当使用谷歌分析时,这会导致很大的问题,因为最初的引用会丢失,所以谷歌不知道你来自哪里.这会丢失有用的信息,例如任何搜索引擎术语.

作为旁注,此方法的优点是可以删除任何可能来自广告系列但仍允许我捕获服务器端的参数.将它们留在查询字符串中会导致人们加入书签或推特或博客链接,而这些链接不应该存在.我已经多次看到这样的情况,人们在我们的网站上链接了包含广告系列ID的链接.

无论如何,我正在为网站的所有传入访问写一个"网关"控制器,我可能会重定向到不同的地方或替代版本.

现在我更关心谷歌(比意外的书签),我希望能够发送访问/该页面的人,如果他们去了/home/7,这是主页的第7版.

就像我之前说的如果我这样做,我失去了谷歌分析引用者的能力:

 return RedirectToAction(new { controller = "home", version = 7 });
Run Code Online (Sandbox Code Playgroud)

我真正想要的是一个

 return ServerTransferAction(new { controller = "home", version = 7 });
Run Code Online (Sandbox Code Playgroud)

这将使我看到没有客户端重定向的视图.我不认为这样的事情存在.

目前我能想到的最好的事情是HomeController.Index(..)在我的GatewayController.IndexAction中复制整个控制器逻辑.这意味着我必须'Views/Home'进入,'Shared'因此它是可访问的.肯定有更好的办法??..

asp.net-mvc server.transfer

123
推荐指数
8
解决办法
7万
查看次数

Response.Redirect HTTP状态代码

为什么ASP/ASP.NET Response.Redirect使用HTTP-302状态代码("暂时移动"),即使在大多数情况下HTTP-301状态代码("永久移动")更合适?

c# asp.net redirect http asp-classic

20
推荐指数
3
解决办法
3万
查看次数

无Cookie会话和跨站点表单帖子

这是情况......

站点1)ASP.NET MVC应用程序,供客户登录,查看和支付账单等.该站点使用无cookie的ASP会话,允许多个会话在选项卡式浏览器中运行.

站点2)具有标准静态内容的公司网站.这将在每个页面的顶部有一个小表单,其中包含将发布到MVC应用程序的用户名/密码表单.

发布到MVC应用程序时,正在生成一个新会话,并且该站点返回302重定向,其中URL中包含会话ID(如预期的那样).控制器有两个Login方法,一个用于处理GET,一个用于处理POST.由于重定向,它击中了GET方法并且它丢失了表单值.

通过更改公司站点上的方法来执行表单GET而不是POST,用户名和密码在重定向后保留在查询字符串中,我可以通过这种方式处理请求,但我宁愿做一个POST而不是通过URL中的数据.

我的直觉说实现某种自定义HttpHandler会允许我这样做,但我不确定我能在哪里与会话创建联系起来.global.asax中Session_Start的断点显示会话ID已经被装箱,并且该点已经发生重定向.

cookies asp.net-mvc

5
推荐指数
1
解决办法
2125
查看次数