当有人点击登录后才能访问的页面时,我正在用查询字符串设置url
。我将该控制器名称设置为查询字符串,然后重定向到登录页面。到现在一切都很好。但是当我登录并使用Response.Redirect(returnUrl);
时,它将转换为空会话。这里returnurl以/Control/Index
的形式出现。如果我只是将其重定向为返回RedirectToAction("Index", "Control");
,则效果很好。
可能是什么问题。
Working Good Redirection - RedirectToAction("Index", "Control");
Not Working Redirection - Response.Redirect("/Control/Index");
答案 0 :(得分:0)
您的问题归结为一个问题:
Response.Redirect()
和RedirectToAction()
有什么区别?
两者均用于将请求从一页转移到另一页。两者都将给出302状态代码。两者都可以用于相同的目的,但是细节决定成败。
Response.Redirect
(以及仅用于URL的Redirect()
)将请求重定向到新URL并指定新URL。 RedirectToAction()
终止当前请求的执行,并使用指定的操作和/或控制器名称开始执行新请求。
RedirectToAction()
保留旧请求和会话。 Response.Redirect()
不在范围内。 RedirectToAction()
留在服务器上执行另一个请求,而Response.Redirect()
返回响应,然后从头开始将下一个请求作为单独的请求处理。
那么RedirectToAction()
更好吗?它不是更好的,只是用于不同的用例。例如,您无法使用RedirectToAction()
重定向到其他网站,因为它超出了本地Web应用程序的范围。将URL传递到所需的网站时,您必须使用Response.Redirect()
。
请参阅this文章,更详细地说明差异,并说明两种方法的往返行程。请注意,它并不能完全解释您的问题,因为它显示了ASP.NET网页中Response.Redirect()
和Server.Transfer()
之间的区别,但是所呈现的概念非常相似。