C# 无法将Lambda函数移植回正常函数

C# 无法将Lambda函数移植回正常函数,c#,lambda,C#,Lambda,我正在使用以下代码段对azure active directory进行身份验证: //Client ID values string applicationId = ***; string applicationSecret = ***; var client = new KeyVaultClient ( async (authority, resource, scope) => { var adCredential = new ClientCr

我正在使用以下代码段对azure active directory进行身份验证:

//Client ID values
string applicationId = ***;
string applicationSecret = ***;

 var client = new KeyVaultClient
 (
     async (authority, resource, scope) =>
     {
         var adCredential = new ClientCredential(applicationId, applicationSecret);
         var authenticationContext = new AuthenticationContext(authority, null);
         return (await authenticationContext.AcquireTokenAsync(resource, adCredential)).AccessToken;
     }
);
这将创建一个通过目录身份验证的KeyVault客户端

我的问题是,当我尝试将这个lambda函数移动到一个正则函数中时,类似这样:

string authority = "";
ClientCredential adCredential = new ClientCredential(applicationId, applicationSecret);
AuthenticationContext authenticationContext = new AuthenticationContext(authority, null);

这就是我的问题所在。无法设置AuthenticationContext,因为授权字符串为空。但是这怎么可能在lambda函数中工作,而不是在它之外,在我看来,lambda函数中的authority字符串也是空白的?所讨论的项目是为测试而创建的,因此它没有任何可以使用的定义。有人知道是什么让lambda工作吗?

下面是没有lambda的代码的等价物

public static async Task<string> AuthenticationCallback(string authority, string resource, string scope) {
    var adCredential = new ClientCredential(applicationId, applicationSecret);
    var authenticationContext = new AuthenticationContext(authority, null);
    return (await authenticationContext.AcquireTokenAsync(resource, adCredential)).AccessToken;
}

var client = new KeyVaultClient(AuthenticationCallback);
公共静态异步任务身份验证回调(字符串权限、字符串资源、字符串范围){
var adCredential=新客户端凭据(applicationId,applicationSecret);
var authenticationContext=新的authenticationContext(authority,null);
返回(Wait authenticationContext.AcquireTokenAsync(resource,adCredential)).AccessToken;
}
var client=新的KeyVaultClient(AuthenticationCallback);
请记住,
KeyVaultClient
需要一个
KeyVaultClient.AuthenticationCallback委托作为参数


不确定为什么要用内联代码行替换lambda(相当于对函数的调用)——当然,lambda将在稍后使用相关参数进行调用,而内联代码将在站点上执行(您的问题中没有明确说明)

因为在您的lambda
中,authority
是一个参数,调用时会提供值。因此,在初始化身份验证上下文时,authority的值是什么?在异步部分设置一个断点并找出:)我无法在其中设置断点,它没有被命中。这就是为什么我首先要删除lambda函数。这可能是调试器问题吗?当未命中断点时,最有可能的是
KeyVaultClient
类没有执行委托(尚未)。似乎我完全误解了这是如何工作的,是从客户端密钥和密钥对中查找ActiveDirectory URL吗?如果您想了解lambda中的代码是如何工作的,然后,你应该发布另一个问题。我的回答是:如何“将Lambda函数移植回正常函数”——基于您的问题