Я пишу приложение Asp.Net Core 2.2, в которое добавляю HttpClient.
services.AddAuthentication(o => {
o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
o.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddQuickbooksOnline(o => {
o.ClientId = Configuration["ecm.qbo.client-id"];
o.ClientSecret = Configuration["ecm.qbo.client-secret"];
o.Scope.Add(QuickbooksOnlineScopes.Accounting);
});
services.AddHttpClient("qbo", c => {
c.BaseAddress = new Uri("https://sandbox-quickbooks.api.intuit.com");
c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
c.DefaultRequestHeaders.Add("content-type", "application/json");
c.DefaultRequestHeaders.Authorization=// How do I get the token to be assigned here?
});
service.AddScoped<IInventoryService, QboInventoryService>();
Итак, в основном я написал себе расширение, которое позволяет мне использовать аутентификацию AddQuickbooksOnline с минимальной конфигурацией, так как многие конфигурации выполняются расширением по умолчанию.
После регистрации и аутентификации в моем приложении я показываю кнопку GetProducts для аутентифицированного пользователя.
Я хочу, чтобы эта кнопка вызывала мой ProductController.
public class ProductController : ControllerBase {
private readonly IInventoryService _inventoryService;
public ProductController(IInventoryService inventoryService) {
_inventoryService=inventoryService??throw new ArgumentNullException(nameof(inventoryService));
}
public async Task<IEnumerable<Product>> Get() {
var products=await _inventoryService.GetAllProducts();
return products;
}
}
И служба на самом деле зависит от настроенного HttpClient, который я хочу добавить в конфигурацию своих служб.
public class QboInventoryService : IInventoryService {
private readonly IHttpClientFactory _clientFactory;
private readonly IConfiguration _config;
public QboInventoryService(IHttpClientFactory clientFactory, IConfiguration config) {
_clientFactory=clientFactory??throw new ArgumentNullException(nameof(clientFactory));
_config=config??throw new ArgumentNullException(nameof(config));
}
public async Task<IEnumerable<Product>> GetAllProducts() {
IEnumerable<Product> products=new List<Product>();
var client=_clientFactory.CreateClient("qbo");
var response=await client.GetAsync(config["qbo.products.query"]);
if(response.IsSuccessStatusCode) {
var content=await response.Content.ReadAsStringAsync();
products=JsonConvert.DeserializeObject<IEnumerable<Product>>(content);
}
return products;
}
}
Итак, чтобы сделать вызов QBO WebAPI, мне нужно предоставить токен OAuth аутентифицированного пользователя создаваемому HttpClient.
services.AddHttpClient
, посмотрите на инициализацию.c.DefaultRequestHeaders.Authorization=???
Вы видите мой вопрос там, когда внимательно искали. - person Will Marcouiller   schedule 15.06.2019