何时使用 LocalRedirect 与 RedirectToPage
Posted
技术标签:
【中文标题】何时使用 LocalRedirect 与 RedirectToPage【英文标题】:When to use LocalRedirect vs RedirectToPage 【发布时间】:2019-02-02 03:16:39 【问题描述】:对于 ASP.Net Core 2.1 Razor Pages,使用 LocalRedirect()
与 RedirectToPage()
的最佳做法是什么?
在重定向到当前网站内的页面时,它们似乎可以互换使用。一个比另一个有优势吗?
【问题讨论】:
除了 Chris 的回答之外,值得注意的是RedirectToPage
使用代表页面的路径,因为它位于文件系统中,而 LocalRedirect
使用本地 URL。例如,使用RedirectToPage
将确保如果您修改页面的路由,则生成的 URL 将匹配正确的路由。
【参考方案1】:
LocalRedirect
应该在您处理“返回 URL”时使用,即您正在传递一个 URL,在完成某些过程(例如登录)后,用户应该被重定向回该 URL。在这样的情况下在这种情况下,恶意行为者可能会将用户发送到您的登录表单,例如,将返回 URL 返回到恶意站点。使用LocalRedirect
可确保“返回 URL”是您网站上实际存在的路由,而不是某些恶意的第三方不良行为者的路由。
当您直接控制用户被重定向到的位置时,可以使用所有其他重定向结果类型。
【讨论】:
RedirectToPage
和 LocalRedirect
不一样安全吗?因为它只适用于本地页面路径?如果是这样,当您不控制返回 url 错误时,您的观点是不是 only 使用LocalRedirect
?
我的回答中可能没有明确,但关键是返回 URL,而不是本地安全。 RedirectToPage 需要了解确切的页面,这不是您在请求之间传递的返回 URL 的一部分。换句话说,当您明确重定向到某个页面时,您使用 RedirectToPage。您使用 LocalRedirect,它只是一个字符串 URL 值,可能会或可能不会映射到特定页面。
将不映射到特定页面的值传递给LocalRedirect
是什么意思?那么预期的行为是什么?
@yola 例如,这可能是一个控制器操作,在这种情况下,如果您愿意,您甚至无法使用 RedirectToPage。也未验证您是否可以路由到它,例如 RedirectToPage。您可以附加 /path/to/nowhere 作为 returnURL,这将通过 LocalRedirect(因为它是本地的),但当然,它会导致 404。以上是关于何时使用 LocalRedirect 与 RedirectToPage的主要内容,如果未能解决你的问题,请参考以下文章