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

调用AuthenticationParameters和AcquireToken相关方法出现报错如何解决

C# ADAL库两处报错排查方案

第一处报错

报错表现

调用代码:

string redirectUrl = ConfigurationManager.AppSettings["RedirectUrl"];
AuthenticationParameters ap = AuthenticationParameters.CreateFromResourceUrlAsync(new Uri(redirectUrl)).Result;

报错提示:非静态字段、方法或属性“AuthenticationParameters.CreateFromResourceUrlAsync(Uri)”需要对象引用

问题原因

当前项目引用的Microsoft.IdentityModel.Clients.ActiveDirectory(ADAL)版本中,CreateFromResourceUrlAsync为实例方法,不支持直接通过类名静态调用。该方法在ADAL v3.x及以上版本才调整为静态方法。

解决方法

  • 方案1:升级项目的ADAL NuGet包到v3.x或更高版本,原静态调用写法可直接生效
  • 方案2:保持当前ADAL版本,先实例化AuthenticationParameters对象后再调用该方法

额外建议:异步方法尽量使用await调用,避免使用.Result引发线程死锁问题

第二处报错

报错表现

调用代码:

AuthenticationContext authContext = new AuthenticationContext(_authority, false);
AuthenticationResult result = authContext.AcquireToken(_serviceUri, clientCred);

报错提示:“AuthenticationContext”不包含“AcquireToken”的定义,找不到接受类型为“AuthenticationContext”的第一个参数的可访问扩展方法“AcquireToken”(是否缺少using指令或程序集引用?)

问题原因

  1. 缺少using Microsoft.IdentityModel.Clients.ActiveDirectory;命名空间引用
  2. ADAL v3.x及以上版本已经移除了同步的AcquireToken方法,仅保留异步的AcquireTokenAsync系列方法

解决方法

  • 首先确认代码文件顶部已添加对应ADAL库的using指令
  • 若使用ADAL v3.x及以上版本,将调用代码改为异步写法即可:
    AuthenticationResult result = await authContext.AcquireTokenAsync(_serviceUri, clientCred);
    
    特殊场景必须同步调用的,可临时用.Result过渡:
    AuthenticationResult result = authContext.AcquireTokenAsync(_serviceUri, clientCred).Result;
    
  • 若必须使用同步AcquireToken方法,将ADAL NuGet包降级到v2.x版本即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:30:00