重定向到.net核心中的查询字符串url时,会话为null

时间:2019-07-26 17:54:33

标签: asp.net-core asp.net-core-mvc asp.net-core-2.0 asp.net-core-2.1

当有人点击登录后才能访问的页面时,我正在用查询字符串设置url。我将该控制器名称设置为查询字符串,然后重定向到登录页面。到现在一切都很好。但是当我登录并使用Response.Redirect(returnUrl);时,它将转换为空会话。这里returnurl以/Control/Index的形式出现。如果我只是将其重定向为返回RedirectToAction("Index", "Control");,则效果很好。 可能是什么问题。

Working Good Redirection - RedirectToAction("Index", "Control");
Not Working Redirection - Response.Redirect("/Control/Index");

1 个答案:

答案 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()之间的区别,但是所呈现的概念非常相似。