如何从服务器端获取碎片值

本文关键字:碎片 获取 服务器端 | 更新日期: 2023-09-27 18:25:06

我的url是:

http://localhost:4567/Test/Callback#state=test&access_token=....

但当调用Request.Url.ToString();时,它只输出

http://localhost:4567/Test/Callback

如何将完整的url发送到服务器?

如何从服务器端获取碎片值

你不能。

散列(#)和查询字符串(?)之间有很大的区别。查询字符串被发送到服务器,而哈希不是。

因此,发送到服务器的url是:http://localhost:4567/Test/Callback

将"哈希"发送到服务器的唯一选项是使用查询字符串:

http://localhost:4567/Test/Callback?state=test&access_token=...
var uri = new Uri("http://localhost:4567/Test/Callback#state=test&access_token=....");
// Contains the query
uri.Fragment

结果:

#state=test&access_token=....

编辑:

要获取网站使用的当前url:

Request.Url.AbsoluteUri;

在Request.Url中是当前页面的所有信息,在Request.UrlRefer中是上一页的所有信息。

注意:当没有以前的请求(来自您的网站)时,Request.UrlReferrer为空。

var url=@"http://localhost:4567/Test/Callback#state=test";
var uri = new Uri(url);
var result = uri.Fragment;

其他人已经发布了您特定问题的答案。

但您似乎正在开发一个ASP.NET网站,因此应该考虑使用标准的?而不是#作为查询字符串的前缀。

这将允许您使用内置的方法和属性来处理查询字符串,并避免自定义容易出错的字符串处理:

string queryString = Request.Url.Query; // gives you "state=test&access_token=...."

或将其作为NameValueCollection:访问

string state = Request.QueryString["state"]; // gives you "test"

您可以使用javascript获取完整链接,然后将其传递给后面的代码

<script language="javascript" type="text/javascript">
    function JavaScriptFunction() {
        document.getElementById('<%= hdnResultValue.ClientID %>').value = document.URL;
    }
</script>
<asp:HiddenField ID="hdnResultValue" Value="0" runat="server" />
        <asp:Button ID="Button_Get" runat="server" Text="run" OnClick="Button_Get_Click" OnClientClick="JavaScriptFunction();" />

然后从后面的代码中获得包含当前完整URL 的hiddenfield的值

protected void Button_Get_Click(object sender, EventArgs e)
{
   string fullURL = hdnResultValue.Value;
   string URl = fullURL .Substring(fullURL .IndexOf('#') + 1);
}

祝好运