Перефразировать Net core AddRefitClient Прочитать заголовок ответа - PullRequest
0 голосов
/ 27 марта 2020

Мне нужна помощь с приведенным ниже кодом для приложения WPF. net core 3.1, которое использует Refit для обработки API REST. Я пытаюсь получить значение AuthToken из заголовка ответа. Но я не могу найти свойство, содержащее значение AuthorizationHeaderValueGetter.

Я вижу некоторые ошибки, связанные с этой проблемой - https://github.com/reactiveui/refit/issues/689. Утверждается, что это было исправлено в версии. net core 3.1. Но я еще не смог получить заголовок ответа.

App.xaml.cs

private void ConfigureServices(IConfiguration configuration, IServiceCollection services)
        {
            services.AddRefitClient<IService>(new RefitSettings()
            {
                AuthorizationHeaderValueGetter = () => Task.FromResult("AuthToken")
            })
            .ConfigureHttpClient(c => c.BaseAddress = new 
             Uri(Configuration.GetSection("MyConfig:GatewayService").Value));
        }

IService.cs Интерфейс IService был определен следующим образом:

[Headers("Content-Type: application/json")]
    public interface IService
    {
        [Post("/v1/Authtoken/")]
        public Task<string> Authenticate([Body] Authenticate payload);
    }

Я внедряю IService в мою ViewModel (WPF) и пытаюсь получить значение заголовка «AuthToken», которое должно быть установлено.

Viewmodel

    public class SomeViewModel: ISomeViewModel
    {
        public SomeViewModel(IService service)
        {
            this.Service = service;
        }

        public async Task<Tuple<bool, string>> Somemethod()
        {
            var authResponse = await Service.Authenticate(authPayload);

            .......
        }

    }

1 Ответ

0 голосов
/ 27 марта 2020

Мне удалось получить заголовок ответа. Тип возврата службы должен быть изменен на System. Net .Http.HttpResponseMessage.


[Headers("Content-Type: application/json")]
    public interface IService
    {
        [Post("/v1/Authtoken/")]
        public Task<HttpResponseMessage> Authenticate([Body] Authenticate payload);
    }

Создан метод расширения, который ищет заголовки ответа для получения значения «AuthToken».

public static class RefitExtensions
    {
        public static async Task<string>GetAuthToken(this Task<HttpResponseMessage> task)
        {
            var response = await task.ConfigureAwait(false);
            string authToken = response.Headers.GetValues("AuthToken").FirstOrDefault();
            return await Task.FromResult(authToken);
        }
    }

В модели представления я получил значение authtoken со следующим утверждением.

var authToken = await Service.Authenticate(authPayload).GetAuthToken();
...