如何将不记名令牌添加到自动生成的 OpenApiToCSharpClient?
How to add bearer token to autogenerated OpenApiToCSharpClient?
我使用 OpenApiToCSharpClient 生成了客户端,但每个请求都是 401 未授权。我在 HttpClient 中添加了不记名令牌,如下所示:
ClientEngine.HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.Token);
生成的客户端是这样使用的:
var userClient = new UserClient(HttpClient);
UserAll.AddRange(await userClient.GetAllAsync());
但问题是 auth header 没有添加到请求中(自动生成的代码如下):
...
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_
object 具有授权 header,但 request_
没有。据我所知,授权 headers 也应该添加到请求中,但事实并非如此。我在 nswag.json
文件中没有任何与授权相关的 属性 - 只有以下属性与 HttpClient 相关:
"disposeHttpClient": true,
"injectHttpClient": true,
"httpClientType": "System.Net.Http.HttpClient",
少了什么?
上面的一切都是正确的,但显然,自动重定向到 https 是个问题 - 不知何故,当请求从 http 升级到 https(自动)时,它会删除 headers。有趣的是,Postman 没有这个问题,只有 HttpClient
.
解决方案 - 在 Startup.cs
中,执行此操作:
if (!env.IsDevelopment())
{
app.UseHttpsRedirection();
}
我使用 OpenApiToCSharpClient 生成了客户端,但每个请求都是 401 未授权。我在 HttpClient 中添加了不记名令牌,如下所示:
ClientEngine.HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.Token);
生成的客户端是这样使用的:
var userClient = new UserClient(HttpClient);
UserAll.AddRange(await userClient.GetAllAsync());
但问题是 auth header 没有添加到请求中(自动生成的代码如下):
...
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_
object 具有授权 header,但 request_
没有。据我所知,授权 headers 也应该添加到请求中,但事实并非如此。我在 nswag.json
文件中没有任何与授权相关的 属性 - 只有以下属性与 HttpClient 相关:
"disposeHttpClient": true,
"injectHttpClient": true,
"httpClientType": "System.Net.Http.HttpClient",
少了什么?
上面的一切都是正确的,但显然,自动重定向到 https 是个问题 - 不知何故,当请求从 http 升级到 https(自动)时,它会删除 headers。有趣的是,Postman 没有这个问题,只有 HttpClient
.
解决方案 - 在 Startup.cs
中,执行此操作:
if (!env.IsDevelopment())
{
app.UseHttpsRedirection();
}