重新安装Net core AddRefitClient读取响应标头



我需要WPF.net核心3.1应用程序的以下代码帮助,该应用程序使用重新安装来处理RESTAPI。我正在尝试从响应标头中获取AuthToken的值。但我找不到具有AuthorizationHeaderValueGetter值的属性。

我确实看到了一些与此问题相关的错误-https://github.com/reactiveui/refit/issues/689.据称,它已在.net core 3.1版本中修复。但我还没能检索到响应标头。

应用程序.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);
}

我正在ViewModel(WPF(中注入IService,并试图获得本应设置的"AuthToken"标头的值。

视图模型

public class SomeViewModel: ISomeViewModel
{
public SomeViewModel(IService service)
{
this.Service = service;
}
public async Task<Tuple<bool, string>> Somemethod()
{
var authResponse = await Service.Authenticate(authPayload);
.......
}
}

我设法得到了响应头。服务的返回类型必须更改为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();

相关内容

  • 没有找到相关文章

最新更新