从 ASP.Net MVC 中的控制器中的请求中获取 # 路由

Getting the # route in from the Request in a controller in ASP.Net MVC

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

如果用户输入 Url 到另一个页面,例如 http://mysite/help the returnUrl is as expected /help. However if the user enters a url containing a hash route like http://mysite/#/test/123,则返回 Url 只是 / 。是否可以从控制器中使用 #/test/123 获得完整的 url?

为了隔离这个问题,我创建了一个简单的 ASP.Net MVC web 项目来演示这种行为,正如您所看到的,调用控制器时缺少 # 路由:

这是web.config:

这是浏览器中的请求:

这是测试应用程序的调试视图,您可以在其中看到 ReturnUrl 只是 / 而 RawUrl 只是包含查询字符串。

在fiddler中也是一样的:

这是 chrome 中登录 url 的重定向。正如您所看到的,URL 的 # 部分以某种方式保留在示例应用程序中,即使它在控制器的请求中不存在,而且我在 fiddler 中也没有看到它。

“#”称为片段,被视为"client dependent"。换句话说,它是给客户端的,不会被发送回服务器。因此,服务器不知道片段可能要重定向到什么。参见

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

来自维基百科文章:

Fragments depend on the document MIME type and are evaluated by the client (Web browser). Clients are not supposed to send URI-fragments to servers when they retrieve a document, and without help from a local application (see below) fragments do not participate in HTTP redirections.[