【问题标题】:session being null when redirect to query string url in .net core重定向到.net核心中的查询字符串url时会话为空
【发布时间】:2019-07-26 17:54:33
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 一切正常。但我现在应该用什么。请给我建议。
    • 这取决于您要重定向的到哪里。如果您要重定向到本地 Web 应用程序范围内的页面,请使用 RedirectToAction()。如果您要重定向到外部网站,请使用Response.Redirect()。可以有更多用例,这是一个非常强大的简化。
    猜你喜欢
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多