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 个想法可能对您有用:
- 尝试在客户端发送请求之前转义 return url。
而不是字符串,将 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
我正在使用 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 个想法可能对您有用:
- 尝试在客户端发送请求之前转义 return url。
而不是字符串,将 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