【问题标题】:NSwag CSharpClientGenerator custom request headers for bearer token不记名令牌的 NSwag CSharpClientGenerator 自定义请求标头
【发布时间】:2020-03-22 20:05:37
【问题描述】:

是否可以使用 NSwag CSharpClientGenerator 添加自定义请求标头?

我的这个方法是从我的一个 API 端点生成的,它接受一些参数,包括一个 BearerToken。请注意,在我的HttpRequestMessageBody 中,我有这个硬编码而不是自动生成的行// request_.Headers.Add("authorization", "Bearer " + bearerToken); how can I add this?。在使用 Swagger JSON 有效负载生成我的客户端 API 时,是否可以通过某种方式以编程方式添加它?

public async System.Threading.Tasks.Task<UnifiedActivityMappingGroupMetadata> GetActivityMappingAsync(System.Guid instanceId, System.Guid groupId, string bearerToken, System.Threading.CancellationToken cancellationToken)
{
    if (instanceId == null)
        throw new System.ArgumentNullException("instanceId");

    if (groupId == null)
        throw new System.ArgumentNullException("groupId");

    if (bearerToken == null)
        throw new System.ArgumentNullException("bearerToken");

    var urlBuilder_ = new System.Text.StringBuilder();
    urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/instances/{instanceId}/manage/activitymappings/{groupId}");
    urlBuilder_.Replace("{instanceId}", System.Uri.EscapeDataString(ConvertToString(instanceId, System.Globalization.CultureInfo.InvariantCulture)));
    urlBuilder_.Replace("{groupId}", System.Uri.EscapeDataString(ConvertToString(groupId, System.Globalization.CultureInfo.InvariantCulture)));
    urlBuilder_.Replace("{bearerToken}", System.Uri.EscapeDataString(ConvertToString(bearerToken, System.Globalization.CultureInfo.InvariantCulture)));

    var client_ = _httpClient;
    try
    {
        using (var request_ = new System.Net.Http.HttpRequestMessage())
        {
            request_.Method = new System.Net.Http.HttpMethod("GET");
            // request_.Headers.Add("authorization", "Bearer " + bearerToken); how can I add this?
            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_);

【问题讨论】:

  • 对 TypeScript 客户端生成有同样的问题。文档有点差(这种情况下缺少示例)github线程似乎已经过时...

标签: c# json rest swagger nswag


【解决方案1】:

解决方案可以是您使用自定义类包装生成的客户端

  • 隐藏不需要的客户端方法
  • 返回内部类型(进行映射)
  • 按照您的要求实现自定义逻辑

【讨论】:

    猜你喜欢
    • 2019-04-11
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2021-09-20
    • 2021-10-10
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多