private async Task <string> MakeRequest(IAbpMethodInvocation invocation) { using (var client = _httpClientFactory.Create()) { var baseUrl = GetBaseUrl(); var action = await _apiDescriptionFinder.FindActionAsync(baseUrl, typeof(TService), invocation.Method); var apiVersion = GetApiVersionInfo(action); var url = baseUrl + UrlBuilder.GenerateUrlWithParameters(action, invocation.ArgumentsDictionary, apiVersion); var requestMessage = new HttpRequestMessage(action.GetHttpMethod(), url) { Content = RequestPayloadBuilder.BuildContent(action, invocation.ArgumentsDictionary, _jsonSerializer, apiVersion) }; AddHeaders(invocation, action, requestMessage, apiVersion); var response = await client.SendAsync(requestMessage); if (!response.IsSuccessStatusCode) { await ThrowExceptionForResponseAsync(response); } return(await response.Content.ReadAsStringAsync()); } }
private async Task <HttpContent> MakeRequestAsync(IAbpMethodInvocation invocation) { var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(typeof(TService)) ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}."); var remoteServiceConfig = AbpRemoteServiceOptions.RemoteServices.GetConfigurationOrDefault(clientConfig.RemoteServiceName); var client = HttpClientFactory.Create(clientConfig.RemoteServiceName); var action = await ApiDescriptionFinder.FindActionAsync(client, remoteServiceConfig.BaseUrl, typeof(TService), invocation.Method); var apiVersion = GetApiVersionInfo(action); var url = remoteServiceConfig.BaseUrl.EnsureEndsWith('/') + UrlBuilder.GenerateUrlWithParameters(action, invocation.ArgumentsDictionary, apiVersion); var requestMessage = new HttpRequestMessage(action.GetHttpMethod(), url) { Content = RequestPayloadBuilder.BuildContent(action, invocation.ArgumentsDictionary, JsonSerializer, apiVersion) }; AddHeaders(invocation, action, requestMessage, apiVersion); await ClientAuthenticator.Authenticate( new RemoteServiceHttpClientAuthenticateContext( client, requestMessage, remoteServiceConfig, clientConfig.RemoteServiceName ) ); var response = await client.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead /*this will buffer only the headers, the content will be used as a stream*/, GetCancellationToken()); if (!response.IsSuccessStatusCode) { await ThrowExceptionForResponseAsync(response); } return(response.Content); }
private async Task <string> MakeRequest(IAbpMethodInvocation invocation) { using (var client = _httpClientFactory.Create()) { var clientConfig = _clientOptions.HttpClientProxies.GetOrDefault(typeof(TService)) ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}."); var baseUrl = GetBaseUrl(clientConfig); var action = await _apiDescriptionFinder.FindActionAsync(baseUrl, typeof(TService), invocation.Method); var apiVersion = GetApiVersionInfo(action); var url = baseUrl + UrlBuilder.GenerateUrlWithParameters(action, invocation.ArgumentsDictionary, apiVersion); var requestMessage = new HttpRequestMessage(action.GetHttpMethod(), url) { Content = RequestPayloadBuilder.BuildContent(action, invocation.ArgumentsDictionary, _jsonSerializer, apiVersion) }; AddHeaders(invocation, action, requestMessage, apiVersion); var accessToken = await _accessTokenProvider.GetOrNullAsync(); if (accessToken != null) { //TODO: "Bearer" should not be static. client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); } var response = await client.SendAsync(requestMessage); if (!response.IsSuccessStatusCode) { await ThrowExceptionForResponseAsync(response); } return(await response.Content.ReadAsStringAsync()); } }
private async Task <string> MakeRequest(IAbpMethodInvocation invocation) { using (var client = _httpClientFactory.Create()) { var clientConfig = _clientOptions.HttpClientProxies.GetOrDefault(typeof(TService)) ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}."); var remoteServiceConfig = _remoteServiceOptions.RemoteServices.GetConfigurationOrDefault(clientConfig.RemoteServiceName); var action = await _apiDescriptionFinder.FindActionAsync(remoteServiceConfig.BaseUrl, typeof(TService), invocation.Method); var apiVersion = GetApiVersionInfo(action); var url = remoteServiceConfig.BaseUrl + UrlBuilder.GenerateUrlWithParameters(action, invocation.ArgumentsDictionary, apiVersion); var requestMessage = new HttpRequestMessage(action.GetHttpMethod(), url) { Content = RequestPayloadBuilder.BuildContent(action, invocation.ArgumentsDictionary, _jsonSerializer, apiVersion) }; AddHeaders(invocation, action, requestMessage, apiVersion); await _clientAuthenticator.Authenticate( new RemoteServiceHttpClientAuthenticateContext( client, requestMessage, remoteServiceConfig ) ); var response = await client.SendAsync(requestMessage); if (!response.IsSuccessStatusCode) { await ThrowExceptionForResponseAsync(response); } return(await response.Content.ReadAsStringAsync()); } }