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

C#中如何从CefSharp EventArgs获取URL并提取OAuth2授权码

用CefSharp实现OAuth2授权码提取

方法一:通过Uri解析查询参数(和WebBrowser方式一致)

和你之前用WebBrowser的思路完全对齐,先把CefSharp返回的URL字符串转成Uri对象,再解析查询参数:

  1. 从事件参数中获取URL并转为Uri:
// 假设e是CefSharp事件(如FrameLoadEndEventArgs)的参数
string urlStr = e.Browser.FocusedFrame.Browser.Url;
Uri authUri = new Uri(urlStr);
  1. 解析查询参数:
  • .NET Framework项目:直接用System.Web.HttpUtility.ParseQueryString
using System.Web;

var queryParams = HttpUtility.ParseQueryString(authUri.Query);
string authCode = queryParams["code"];
// 解码URL编码字符(比如把%2F转成/)
authCode = HttpUtility.UrlDecode(authCode);
  • .NET Core/.NET 5+项目:使用QueryHelpers.ParseQuery(需先安装Microsoft.AspNetCore.WebUtilities NuGet包)
using Microsoft.AspNetCore.WebUtilities;

var queryParams = QueryHelpers.ParseQuery(authUri.Query);
if (queryParams.TryGetValue("code", out var codeValues))
{
    string authCode = codeValues.FirstOrDefault();
    authCode = System.Net.WebUtility.UrlDecode(authCode);
}

方法二:直接字符串匹配提取(适合参数位置固定的场景)

如果确认授权码始终在code=和&country=之间,也可以用正则表达式直接提取:

using System.Text.RegularExpressions;

string urlStr = e.Browser.FocusedFrame.Browser.Url;
// 匹配code=之后、&country=之前的所有字符
Match match = Regex.Match(urlStr, @"code=([^&]+)&country=");
if (match.Success)
{
    string authCode = match.Groups[1].Value;
    // 解码URL编码字符
    authCode = System.Web.HttpUtility.UrlDecode(authCode); // .NET Framework
    // .NET Core环境用:authCode = System.Net.WebUtility.UrlDecode(authCode);
}

注意事项

  • 推荐在FrameLoadEnd事件中处理,确保页面加载完成后URL已稳定;避免在Navigating事件中操作,此时URL可能还未更新。
  • 必须对提取到的授权码做URL解码,比如示例中的GB%2F解码后才是GB/,否则会影响后续换取token的流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:18:29