Return url 功能

Return url functionality

我正在使用 ASP.NET Core MVC 和 C#。

我的登录控制器上有一项功能,可以获取名为 ReturnUrl 的参数。我的想法是,如果这是在用户登录时设置的,那么我可以将他们重定向回页面。直截了当。

代码如下所示:

[HttpGet]
[AllowAnonymous]
public IActionResult Login(string returnUrl = null)
{
     ...
}

但是,登录功能由 MVC 处理,主要内容使用 Angular(版本 1 而非版本 2)。我的应用程序中的路线是(例如)http://localhost/#/location1.

如果我使用 http://localhost/Login/?returnUrl=http://localhost/#/location1 访问我的 MVC 登录页面(同样,只是一个示例),那么我在 returnUrl 参数中得到的只是 http://localhost/。它会丢弃从 # 符号开始的所有内容。

有什么想法可以阻止代码在 # 符号处自动转义并将完整的 url 作为 returnUrl 对象吗?

我有 2 个想法可能对您有用:

  1. 尝试在客户端发送请求之前转义 return url。
  2. 而不是字符串,将 return url 类型更改为 Uri 对象

    [HttpGet]
    [AllowAnonymous] 
    public IActionResult Login(Uri returnUrl = null)
    {
         ...
    }
    

如果您在浏览器的调试工具中注意到,浏览器不会将此 # 及其后的任何文本发送到服务器,因此服务器根本不知道它的存在。

所以不要像下面这样,

http://localhost/Login/?returnUrl=http://localhost/#location1

这样做(注意 # 在 url 中编码为 %23

http://localhost/Login/?returnUrl=http://localhost/%23location1