【问题标题】:How to add bearer token to autogenerated OpenApiToCSharpClient?如何将不记名令牌添加到自动生成的 OpenApiToCSharpClient?
【发布时间】:2021-01-24 01:18:51
【问题描述】:

我有使用 OpenApiToCSharpClient 生成的客户端,但每个请求都是 401 未经授权的。我在 HttpClient 中添加了不记名令牌,如下所示:

ClientEngine.HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.Token);

生成的客户端是这样使用的:

 var userClient = new UserClient(HttpClient);
 UserAll.AddRange(await userClient.GetAllAsync());

但问题是 auth 标头未添加到请求中(自动生成的代码如下):

...
request_.Method = new System.Net.Http.HttpMethod("GET");
                request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json"));

PrepareRequest(client_, request_, urlBuilder_);
var url_ = urlBuilder_.ToString();
request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute);
PrepareRequest(client_, request_, url_);

var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
var disposeResponse_ = true;
...

请求已发送,但只有 client_ 对象具有授权标头,而 request_ 没有。据我所知,授权标头也应该添加到请求中,但它们不是。我在nswag.json 文件中没有任何与授权相关的属性 - 只有以下属性与 HttpClient 相关:

  "disposeHttpClient": true,
  "injectHttpClient": true,
  "httpClientType": "System.Net.Http.HttpClient",

缺少什么?

【问题讨论】:

    标签: c# dotnet-httpclient nswag


    【解决方案1】:

    上面的一切都是正确的,但显然,自动重定向到 https 是有问题的 - 不知何故,当请求从 http 升级到 https(自动)时,它会剥离标头。有趣的是,Postman 没有这个问题,只有HttpClient

    解决方案 - 在Startup.cs 中,执行以下操作:

     if (!env.IsDevelopment())
     {
         app.UseHttpsRedirection();
     }
    

    【讨论】:

      猜你喜欢
      • 2021-03-15
      • 1970-01-01
      • 2021-04-13
      • 2021-07-08
      • 1970-01-01
      • 2021-06-10
      • 2019-11-14
      • 2018-12-07
      • 2022-01-19
      相关资源
      最近更新 更多