Вот исходный код для этого метода расширения:
public static Task<string> GetTokenAsync(this HttpContext context, string scheme,
string tokenName) =>
context.RequestServices.GetRequiredService<IAuthenticationService>
().GetTokenAsync(context, scheme, tokenName);
, который в свою очередь вызывает этот метод расширения:
public static async Task<string> GetTokenAsync(this IAuthenticationService auth, HttpContext context, string scheme, string tokenName)
{
if (auth == null)
{
throw new ArgumentNullException(nameof(auth));
}
if (tokenName == null)
{
throw new ArgumentNullException(nameof(tokenName));
}
var result = await auth.AuthenticateAsync(context, scheme);
return result?.Properties?.GetTokenValue(tokenName);
}
Конечный результат вызывает AuthenticateAsync
, как видно из line var result = await auth.AuthenticateAsync(context, scheme);
.
Поскольку вы не можете изменять методы расширения, возможно, вы можете написать свои собственные макеты?
Я не совсем уверен, что лучше всего делать макет над объектом, у которого есть методы расширения, поэтому, возможно, кто-то может расширить этот ответ.
Стоит отметить AuthenticateAsync
не метод расширения, и вы можете найти код здесь .
Как упомянуто @Nkosi:
Mock IServiceProvider
и IAuthenticationService
.
ИМХО, видеть реальный код всегда полезно, так что вы можете определить и понять, что он делает под прикрытием, и полностью смоделировать все необходимые фрагменты, поэтому я оставлю выше вверх.