我有一个使用表单身份验证的ASP.Net MVC网站,其中loginUrl设置为用于在web.config中进行身份验证的Url。登录过程调用登录控制器,通过SSO进程进行重定向等,日志进程正常工作,用户可以登录等。作为登录过程的一部分,我使用returnUrl将用户发送到他们最初的页面请求。如果没有指定,则为默认值。从ASP.Net中的控制器中的请求获取#路由MVC
如果用户在Url中键入另一个页面,例如http://mysite/help,那么returnUrl与预期的/帮助类似。但是,如果用户输入一个包含像http://mysite/#/test/123这样的散列路径的url,那么returnUrl就是/。是否有可能从控制器中获得#/ test/123的完整url?
要隔离这个问题,我创建了一个演示了此行为简单的ASP.Net MVC Web项目,正如你可以看到#路由丢失时,控制器称为:
这里是web.config中:
这里是在浏览器的请求:
这里是测试应用程序的调试视图,您可以在其中看到ReturnUrl只是/并且RawUrl只有查询字符串。
这里是小提琴手一样的:
这里是重定向到铬登录URL。正如你所看到的那样,URL的#部分以某种方式保存在示例应用程序中,尽管它在控制器中的请求中不存在,并且我没有在提琴手中看到它。
@ErikFunkenbusch - 谢谢我怀疑这是发生了什么事。我最终将我需要的#个参数传递给查询字符串参数,然后在将用户发送到页面时添加了这些参数。 I.E?hashstate = test%2f/3。如果你写这个答案我会接受这个解决方案。 – kmcnamee