Я следую примеру кода, представленному в "Лазурь-образец", чтобы получить токен для вызова 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();
}
Resharper предлагает «Возможное исключение System.NullReferenceException», есть идеи, как решить?





Способ обработки такого случая - проверить значение 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.
}
Хорошо, в этом случае: это должен быть InvalidOperationException . Но дело остается прежним. Сделайте проверку перед строкой 88, где вы ее используете, и предложение решарпера должно исчезнуть. Если нет: сообщите об ошибке на сайте jetbrains/resharper.
Спасибо Стефан за помощь.
В ReSharper включен «пессимистический» режим анализа значений, и он считает, что все может быть «нулевым», если оно явно не проверено на нулевое или аннотировано атрибутом «NotNull» или «ContractAnnotation». Некоторые варианты обработки этого случая:
извлеките «app.AcquireTokenForClientAsync (scopes)» в локальную переменную и проверьте ее на значение null:
var task = app.AcquireTokenForClientAsync(scopes); если (задача == ноль) выдать новое исключение (); результат = ожидание задачи;
Включить режим анализа стоимости "Оптимистичный"
Спасибо. Раньше я делал то же самое, но с той же проблемой. Здесь приложение — ConfidentialClientApplication. Пожалуйста, проверьте github.com/Azure-Samples/active-directory-dotnetcore-daemon-v2/…