获取令牌时如何解决“ possible System.NullReferenceException”

时间:2019-07-26 17:14:10

标签: azure-active-directory resharper msal

我正在遵循"Azure-Sample"中提供的示例代码来获取令牌以调用Microsoft Graph Api。但是Resharper建议在等待应用程序中使用“可能的System.NullReferenceException”。AcquireTokenForClient(scopes).ExecuteAsync();如何解决NullReference异常?

克隆代码并看到“ Possible System.NullReferenceException”

AuthenticationResult result = null;
            try
            {
                result = await app.AcquireTokenForClient(scopes)
                    .ExecuteAsync();
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("Token acquired");
                Console.ResetColor();
            }
            catch (MsalServiceException ex) when (ex.Message.Contains("AADSTS70011"))
            {
                // Invalid scope. The scope has to be of the form "https://resourceurl/.default"
                // Mitigation: change the scope to be as expected
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Scope provided is not supported");
                Console.ResetColor();
            }

enter image description here

Resharper建议使用“可能的System.NullReferenceException”,您知道如何解决吗?

2 个答案:

答案 0 :(得分:1)

在ReSharper中启用了“悲观”值分析模式,它认为一切都可以为“空”,除非对其进行显式检查为空或使用“ NotNull”或“ ContractAnnotation”属性进行注释。 一些处理这种情况的选项:

  1. 为“ AcquireTokenForClient”提供外部注释
  2. 将“ app.AcquireTokenForClientAsync(scopes)”提取为局部变量,并检查其是否为空:

    var task = app.AcquireTokenForClientAsync(scopes); 如果(任务== null)抛出新的Exception(); result =等待任务;

  3. 启用“乐观”值分析模式

答案 1 :(得分:0)

处理这种情况的方法是检查null并引发一个异常(如果存在)。

假设app是您方法的输入变量:

void Foo(IApp app) //just using IApp as an example.
{
    if (app == null)
        throw new ArgumentNullException(nameof(app));

    var result = app.Bar(); //no possible null ref here.
}