之后的URL部分称为“片段”。它不会发送到服务器,因为它旨在提示JavaScript或浏览器中的操作。更多关于here。
如果您的不是实际上意图代表一个片段,则应该由任何提交请求的人逃脱(与%23
)。
否则,您将不得不使用JavaScript函数将数据发送到服务器,但这并不是特别好,更不用说通用的解决方案。
在你的具体例子中,http://mysite/myApp/Accounts/Login?ReturnUrl=%2fmyApp%2f#/myspa1
,我不确定你在找什么。
但是,我假设您要ReturnUrl
参数映射到/myApp/#/myspa1
?在这种情况下,重定向代理应该是URL转义参数地址的完整,而不是事后追加任何东西。
在另一方面,如果你的ReturnUrl
被意味着仅代表/myApp/
,而片段部分,就是要传递到登录页面,你应该处理JavaScript中的需要,因为它不会是立即发送到服务器。
编辑:
我看到这张贴在评论作为一种解决方案,所以我会追加究竟是什么“JavaScript作为需要被”指的是。 This answer在这里特别有用。
实质上,这个想法是在页面执行回发到服务器时捕获URL片段,并将其存储在服务器端控件中。
例如,
<asp:HiddenField runat="server" ID="URLFragmentValue" />
<script>
$("form").submit(function() {
$('#<%= URLFragmentValue.ClientID %>').val(window.location.hash);
});
</script>
或者该脚本的非jQuery的形式:
<form onsubmit="setUrlFragment()"> ... </form>
<script>
function setUrlFragment() {
document.getElementById('<%= URLFragmentValue.ClientID %>').value = window.location.hash;
});
</script>
这是它的要点。这个答案也给出了一个如何在页面的负载中检索和注入散列片段的例子,但这与你的问题的范围看起来并不相关。
当页面碰到你的服务器时,你可以检查URLFragmentValue.Value
,幸运的话,你可以查看和处理你的分段值。
但是,我要强调一下,你应该确保你正确地使用了片段。有时候,比如在后卫的情况下,你需要做这样的事情。但是也有一些时候,碎片被滥用,这是一种使这种滥用的手段。确保你不在这个方面。在实施可以有条件地认为的Band-Aid来解决这个问题之前,理解其含义并且有合理的推理。
[如何从服务器端获取Url哈希(#)]的可能重复(http://stackoverflow.com/questions/317760/how-to-get-url-hash-from-server-side) –
什么如下哈希不会发送到服务器。你需要一些Javascript魔术来尝试这个。 –
谢谢罗文,你发送的URL似乎正是我所需要的。 – rcarrillopadron