You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何获取含#的完整页面URL及#后access_token值?

在C#中处理带#的URL:获取完整URL与提取access_token

首先得明确一个关键细节:浏览器不会把URL中#之后的锚点(hash)部分发送到服务器。所以如果你的代码是ASP.NET服务器端代码,直接通过Request.Url是拿不到#后面内容的。下面分两种场景来解决你的问题:

一、客户端场景(比如WinForms/WebBrowser、WPF/WebView或自定义HTTP请求)

如果是在客户端代码里处理URL(比如自己构造了带#的URL,或者通过浏览器控件加载页面后获取完整URL),直接就能拿到包含#的完整URL:

获取完整URL

比如用WinForms的WebBrowser控件:

// 假设webBrowser1已经加载了目标页面
string fullUrl = webBrowser1.Url.AbsoluteUri;
// fullUrl会包含#及后面的所有内容,和你示例中的URL完全一致

如果是你自己构造的URL字符串,直接使用这个字符串即可,无需额外处理。

提取#后的access_token

拿到完整URL后,我们可以把#后面的部分当作类似QueryString的格式来解析:

.NET Framework(使用System.Web)

string url = "http://localhost:12365/Dashboard.aspx#access_token=adfgafdg73e9c4ggg186fbfcf05e775a6f2gggd8&expires_in=3600&token_type=Bearer&state=zxv";

// 分割出#后面的hash部分
int hashPosition = url.IndexOf('#');
string hashContent = hashPosition != -1 ? url.Substring(hashPosition + 1) : string.Empty;

// 解析hash中的参数,和解析QueryString逻辑一致
var hashParams = System.Web.HttpUtility.ParseQueryString(hashContent);
string accessToken = hashParams["access_token"];

// 此时accessToken就是你需要的参数值

.NET Core/.NET 5+(使用Microsoft.AspNetCore.WebUtilities)

如果是.NET Core或更高版本,推荐用QueryHelpers类(需要引用Microsoft.AspNetCore.WebUtilities包):

using Microsoft.AspNetCore.WebUtilities;

string url = "http://localhost:12365/Dashboard.aspx#access_token=adfgafdg73e9c4ggg186fbfcf05e775a6f2gggd8&expires_in=3600&token_type=Bearer&state=zxv";

int hashPosition = url.IndexOf('#');
string hashContent = hashPosition != -1 ? url.Substring(hashPosition + 1) : string.Empty;

// 解析hash参数
var hashParams = QueryHelpers.ParseQuery(hashContent);
string accessToken = hashParams["access_token"].FirstOrDefault();

二、服务器端场景(ASP.NET)

因为浏览器不会把#部分发送到服务器,所以服务器端无法直接获取这部分内容,需要前端配合传递:

  1. 前端用JavaScript获取hash并发送到服务器
window.addEventListener('load', function() {
    // 获取#后面的内容(去掉开头的#)
    const hashData = window.location.hash.substring(1);
    // 通过AJAX把hash数据发送到服务器
    fetch('/Dashboard/ProcessHash', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        body: `hash=${encodeURIComponent(hashData)}`
    });
});
  1. 服务器端接收并解析
[HttpPost]
public IActionResult ProcessHash(string hash)
{
    // 解析hash中的access_token
    var hashParams = System.Web.HttpUtility.ParseQueryString(hash);
    string accessToken = hashParams["access_token"];
    
    // 后续处理逻辑...
    return Ok();
}

这样就能在服务器端拿到access_token的值了。

内容的提问来源于stack exchange,提问作者Mahendra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:26:27