我需要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();