【问题标题】:AutoRest is requiring ServiceClientCredentials in the constructor, but I can't obtain that data without instantiating the client objectAutoRest 在构造函数中需要 ServiceClientCredentials,但如果不实例化客户端对象,我就无法获取该数据
【发布时间】:2019-10-21 11:53:17
【问题描述】:

我使用 AutoRest 生成了一个 API 客户端,并使用了 --add-credentials 参数,以便我可以传入一个不记名令牌。为了获得令牌,我需要能够实例化对象并像这样调用我的登录方法:

var client = new IOIWebAPI(new Uri("https://localhost:44325", UriKind.Absolute));
var loginResult = client.Login(authModel);

问题是每个构造函数都需要ServiceClientCredentials。据我了解,我需要创建一个TokenCredentials 的实例,其中包含令牌字符串。但我不能这样做,因为不调用 Login 就无法获取令牌字符串。而且我不能在没有令牌字符串的情况下调用 Login。

我确定我只是误解了如何使用 API 客户端。但是关于我在这里做错了什么有什么想法吗?

【问题讨论】:

    标签: c# swagger bearer-token autorest


    【解决方案1】:

    我最好的猜测是--add-credentials 不支持未经身份验证的端点。当您添加凭据时,AutoRest 假定所有内容都需要身份验证。我为此提交了issue,但我怀疑它不会很快得到解决。

    我的解决方法是创建一个TokenHelper 类。我将 AutoRest 从我的登录端点生成的代码复制并粘贴到该类中。所以代码保持一致,但并不理想,因为如果端点发生变化,我可能会忘记更新端点。

    var tokenHelper = new TokenHelper(baseUri);
    var tokenResult = tokenHelper.GetTokenAsync(authModel).GetAwaiter().GetResult();
    
    var token = new TokenCredentials(tokenResult.AccessToken, "Bearer");
    var client = new IOIWebAPI(baseUri, token);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      相关资源
      最近更新 更多