【问题标题】:Return url functionality返回网址功能
【发布时间】:2016-07-10 15:20:29
【问题描述】:

我正在使用带有 C# 的 ASP.NET Core MVC。

我的登录控制器上有一个功能,可以获取一个名为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 对象?

【问题讨论】:

标签: c# routing asp.net-core asp.net-core-mvc request.querystring


【解决方案1】:

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

所以不是像下面这样,

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 从字符串更改为 Uri 时出现编译错误。无法控制客户端 url,因为不幸的是它可能是我们应用程序中页面的书签:-(
    猜你喜欢
    • 1970-01-01
    • 2010-12-25
    • 2015-08-08
    • 1970-01-01
    • 2010-12-05
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多