重定向到 .net core 中的查询字符串 url 时会话为空

session being null when redirect to query string url in .net core

我正在设置 url 查询字符串,当任何人点击此类页面时只能在登录后访问。我将该控制器名称设置为查询字符串并重定向到登录页面。到这里为止一切正常。但是当我登录并使用 Response.Redirect(returnUrl); 时,它会将我的会话转换为空。这里 returnurl 变成 /Control/Index。如果我只是重定向为 return RedirectToAction("Index", "Control"); 则它工作正常。 可能是什么问题。

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

你的问题归结为一个问题:

What is the difference between Response.Redirect() and RedirectToAction()?

两者都用于将请求从一个页面转移到另一个页面。两者都会给出 302 状态码。两者可以用于相同的目的,但细节决定成败。

Response.Redirect(以及仅与 URL 一起使用的 Redirect())将请求重定向到新的 URL 并指定新的 URL。 RedirectToAction() 终止当前请求的执行并使用指定的操作开始执行新请求 and/or 控制器名称。

RedirectToAction() 保留会话中的旧请求。 Response.Redirect() 没有,因为它超出了它的范围。 RedirectToAction() 留在服务器上执行另一个请求,而 Response.Redirect() returns 响应然后从头开始处理下一个请求作为一个单独的请求。

那么,RedirectToAction() 更好吗?它并不更好,它只是针对不同的用例。例如,您不能使用 RedirectToAction() 重定向到不同的网站,因为它超出了您本地 Web 应用程序的范围。在将 URL 传递给所需的网站时,您必须使用 Response.Redirect()

请参阅 this 文章,更详细地解释差异并说明两种方法的往返行程。请注意,它并不能完全解释您的问题,因为它显示了来自 ASP.NET 网页的 Response.Redirect()Server.Transfer() 之间的差异,但是所呈现的概念非常相似。