【发布时间】:2015-04-30 02:48:50
【问题描述】:
我有一个使用表单身份验证的 ASP.Net MVC 网站,其中 loginUrl 设置为用于在 web.config 中进行身份验证的 Url。登录过程调用登录控制器,该控制器通过 SSO 过程进行重定向等,并且日志过程正常工作,用户可以登录等。作为登录过程的一部分,我使用 returnUrl 将用户发送到他们最初的页面请求。或者如果没有指定默认值。
如果用户在另一个页面上输入一个 URL,例如 http://mysite/help,returnUrl 就是预期的 /help。但是,如果用户输入一个包含像 http://mysite/#/test/123 这样的哈希路由的 url,returnUrl 就是 / 。是否可以从控制器中获取带有 #/test/123 的完整 url?
为了隔离这个问题,我创建了一个简单的 ASP.Net MVC Web 项目来演示这种行为,您可以看到调用控制器时缺少 # 路由:
这是 web.config:
这是浏览器中的请求:
这是测试应用程序的调试视图,您可以在其中看到 ReturnUrl 只是 /,而 RawUrl 只有查询字符串。
fiddler 中也是这样:
这里是 chrome 中登录 url 的重定向。正如您所看到的,URL 的 # 部分以某种方式保留在示例应用程序中,即使它在控制器的请求中不存在并且我在 fiddler 中看不到它。
【问题讨论】:
-
@ErikFunkenbusch - 谢谢,我怀疑这是怎么回事。我最终将我需要的 # 参数传递给了一个查询字符串参数,然后在将用户发送到页面时将其添加回来。即 ?hashstate=test%2f/3。如果您将其写为答案,我将接受此解决方案。
标签: c# asp.net asp.net-mvc asp.net-mvc-4 forms-authentication