Как разрешить «возможное исключение System.NullReferenceException» при получении токена

Я следую примеру кода, представленному в "Лазурь-образец", чтобы получить токен для вызова Microsoft Graph Api. Но Resharper предлагает «Возможное исключение System.NullReferenceException» в ожидании app.AcquireTokenForClient(scopes) .ExecuteAsync(); Как разрешить исключение NullReference?

Клонируйте код и увидите "Возможное исключение 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();
            }

Как разрешить «возможное исключение System.NullReferenceException» при получении токена

Resharper предлагает «Возможное исключение System.NullReferenceException», есть идеи, как решить?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
172
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Способ обработки такого случая - проверить значение 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.
}

Спасибо. Раньше я делал то же самое, но с той же проблемой. Здесь приложение — ConfidentialClientApplication. Пожалуйста, проверьте github.com/Azure-Samples/active-directory-dotnetcore-daemon-‌​v2/…

Debasis Ghosh 26.07.2019 20:06

Хорошо, в этом случае: это должен быть InvalidOperationException . Но дело остается прежним. Сделайте проверку перед строкой 88, где вы ее используете, и предложение решарпера должно исчезнуть. Если нет: сообщите об ошибке на сайте jetbrains/resharper.

Stefan 26.07.2019 23:57

Спасибо Стефан за помощь.

Debasis Ghosh 29.07.2019 12:23
Ответ принят как подходящий

В ReSharper включен «пессимистический» режим анализа значений, и он считает, что все может быть «нулевым», если оно явно не проверено на нулевое или аннотировано атрибутом «NotNull» или «ContractAnnotation». Некоторые варианты обработки этого случая:

  1. Предоставьте внешние аннотации для «AcquireTokenForClient».
  2. извлеките «app.AcquireTokenForClientAsync (scopes)» в локальную переменную и проверьте ее на значение null:

    var task = app.AcquireTokenForClientAsync(scopes); если (задача == ноль) выдать новое исключение (); результат = ожидание задачи;

  3. Включить режим анализа стоимости "Оптимистичный"

Другие вопросы по теме