public abstract class MySwaggerClientBase
{
public string BearerToken { get; private set; }
public void SetBearerToken(string token)
{
BearerToken = token;
}
// Called by implementing swagger client classes
protected Task<HttpRequestMessage> CreateHttpRequestMessageAsync(CancellationToken cancellationToken)
{
var msg = new HttpRequestMessage();
// SET THE BEARER AUTH TOKEN
msg.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", BearerToken);
return Task.FromResult(msg);
}
}
4条答案
按热度按时间wpx232ag1#
@oguzhan-soykan和@peter的答案都很好--这里是@peter答案的扩展,展示了如何实现基类,而不是为每个API客户端重复自己。
要求
.JSON
定义创建一个公开所需功能的“Client”基类。可能是不记名代币。
编辑swagger代码生成命令,以便为所有生成的客户机使用基类,并使用UseHttpRequestMessageCreationMethod选项。
vwoqyblh2#
我用偏方的方法解决了这个问题。我的例子是:
CampaignClient.cs
CampaignClient.Extensions.cs -分部类:
方法覆盖救了我!
b09cbbtk3#
对于C#客户端,您可以指定
UseHttpClientCreationMethod
或UseHttpRequestMessageCreationMethod
(Cf. https://github.com/RicoSuter/NSwag/blob/master/src/NSwag.CodeGeneration.CSharp/SwaggerToCSharpClientGeneratorSettings.cs)
这样一来,NSwag就希望您实现用于创建HttpClient或HttpRequest的方法。你可以在那里设置你的标题,而不需要任何魔法。
knsnq2tg4#
如果你想使用接口而不是抽象类,那么这就是这种情况的解决方案
1.设置为客户端生成接口的选项
1.向NSwag生成的部分接口添加第二个部分
1.向NSwag生成的部分客户端添加第二个部分
使用接口而不是抽象类的好处是所有操作都将在接口中定义,但基类不会在基类中创建抽象方法