#号是页面定位符,比如:http://XXX/index.html#anchor ,此URL表示在页面中anchor的位置。浏览器读取这个URL后,会自动将anchor位置滚动至可视区域。不管#号后面跟的是什么参数,一律看成是位置标识符。服务器接收不到#后面的内容。只可以通过javascript使用window.location.hash来改变#号后面的值
我的项目中sso回调时,token放在了#后面,服务器需要获取token的内容,就用JS的方式重新请求了一遍地址,将#替换为?即可获取token信息。代码如下:
if (string.IsNullOrWhiteSpace(Request.QueryString["token"]))
{
HttpContext.Response.Clear();
HttpContext.Response.Write("<script>location.href='/ssocallback'+window.location.hash.replace('#','?');</script>");
HttpContext.Response.End();
}
然后就可以获取token信息:
string token = Request.QueryString["token"].ToString();