我没有确切了解 NSwag 如何与 IdentityServerX 不记名令牌交互并按常规添加请求标头?据我了解,我的主机 api 应用程序使用 LDAP 身份验证实现了 IdentityServer3;如果任何主机需要令牌进行身份验证,则任何客户端都必须在请求标头中发送它。那么,在与 NSwag 客户合作时我该如何处理呢?
任何想法表示赞赏。
谢谢。
@oguzhan-soykan 和 @peter 的答案都很好 - 这是 @peter 答案的扩展,以展示如何实现基类而不是为每个 API 客户端重复自己。
要求
- NSwag.MSBuild 包
- Swagger
.JSON
定义
创建一个公开您需要的功能的“客户端”基类。可能是不记名令牌财产。
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);
}
}
编辑 swagger 代码生成命令,为所有生成的客户端使用基类,并使用使用HttpRequestMessageCreation方法 https://github.com/RicoSuter/NSwag/wiki/CSharpClientGeneratorSettings option.
<Project>
...
<Exec Command="$(NSwagExe) swagger2csclient /input:path-to-swagger-definition.json /output:$(ProjectDir)\Swagger.generated.cs /Namespace:MyNameSpace /ClientBaseClass:MySwaggerClientBase /UseHttpRequestMessageCreationMethod:true" />
...
</Project>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)