从ASP.Net MVC中的控制器中的Request中获取#route

时间:2015-04-30 02:48:50

标签: c# asp.net asp.net-mvc asp.net-mvc-4 forms-authentication

我有一个使用Forms身份验证的ASP.Net MVC网站,loginUrl设置为Url,用于在web.config中进行身份验证。登录过程调用登录控制器,该登录控制器通过SSO过程进行重定向等,日志过程正常,用户可以登录等。作为登录过程的一部分,我使用returnUrl将用户发送到他们最初的页面请求。如果没有指定,则为默认值。

如果用户在其他网页(例如http://mysite/help)中输入了网址,则returnUrl与预期/帮助相同。但是,如果用户输入包含像http://mysite/#/test/123这样的哈希路由的URL,则returnUrl只是/。是否可以从控制器中获取#/ test / 123的完整URL?

为了解决这个问题,我创建了一个简单的ASP.Net MVC Web项目来演示这种行为,正如您可以看到调用控制器时缺少#route:

这是web.config:

web.config

以下是浏览器中的请求:

enter image description here

以下是测试应用程序的调试视图,您可以看到ReturnUrl只是/而RawUrl只有查询字符串。

enter image description here

fiddler中也是如此:

enter image description here

以下是Chrome中登录网址的重定向。正如您所看到的,URL的#部分以某种方式保留在示例应用程序中,即使它在控制器中的请求中不存在,我也不会在fiddler中看到它。

enter image description here

1 个答案:

答案 0 :(得分:1)

"#"被称为片段,被认为是"客户端依赖"。换句话说,它是客户端的,不会被发送回服务器。因此,服务器不知道片段可能会重定向到什么。见

http://en.wikipedia.org/wiki/Fragment_identifier

来自维基百科的文章:

  

片段取决于文档MIME类型,并由客户端(Web浏览器)进行评估。客户端在检索文档时不应该向服务器发送URI片段,如果没有本地应用程序的帮助(见下文),片段不会参与HTTP重定向。[