Merge pull request #538 from iceljc/features/refine-send-http-request
refine http handler
This commit is contained in:
commit
30c809ed37
|
|
@ -39,7 +39,7 @@ public class HandleHttpRequestFn : IFunctionCallback
|
||||||
{
|
{
|
||||||
var response = await SendHttpRequest(url, method, content);
|
var response = await SendHttpRequest(url, method, content);
|
||||||
var responseContent = await HandleHttpResponse(response);
|
var responseContent = await HandleHttpResponse(response);
|
||||||
message.RichContent = BuildRichContent(responseContent);
|
message.Content = responseContent;
|
||||||
message.StopCompletion = true;
|
message.StopCompletion = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -47,7 +47,7 @@ public class HandleHttpRequestFn : IFunctionCallback
|
||||||
{
|
{
|
||||||
var msg = $"Fail when sending http request. Url: {url}, method: {method}, content: {content}";
|
var msg = $"Fail when sending http request. Url: {url}, method: {method}, content: {content}";
|
||||||
_logger.LogWarning($"{msg}\n(Error: {ex.Message})");
|
_logger.LogWarning($"{msg}\n(Error: {ex.Message})");
|
||||||
message.RichContent = BuildRichContent($"{msg}");
|
message.Content = msg;
|
||||||
message.StopCompletion = true;
|
message.StopCompletion = true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -57,21 +57,14 @@ public class HandleHttpRequestFn : IFunctionCallback
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(url)) return null;
|
if (string.IsNullOrEmpty(url)) return null;
|
||||||
|
|
||||||
var settings = _services.GetRequiredService<HttpHandlerSettings>();
|
|
||||||
using var client = _httpClientFactory.CreateClient();
|
using var client = _httpClientFactory.CreateClient();
|
||||||
AddRequestHeaders(client);
|
AddRequestHeaders(client);
|
||||||
|
|
||||||
var (uri, request) = BuildHttpRequest(url, method, content);
|
var (uri, request) = BuildHttpRequest(url, method, content);
|
||||||
if (string.IsNullOrEmpty(uri.Host))
|
|
||||||
{
|
|
||||||
client.BaseAddress = new Uri(settings.BaseAddress);
|
|
||||||
}
|
|
||||||
|
|
||||||
var response = await client.SendAsync(request);
|
var response = await client.SendAsync(request);
|
||||||
|
|
||||||
if (response == null || !response.IsSuccessStatusCode)
|
if (response == null || !response.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
throw new Exception($"Status code: {response?.StatusCode}");
|
_logger.LogWarning($"Response status code: {response?.StatusCode}");
|
||||||
}
|
}
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
|
|
@ -94,17 +87,24 @@ public class HandleHttpRequestFn : IFunctionCallback
|
||||||
var httpMethod = GetHttpMethod(method);
|
var httpMethod = GetHttpMethod(method);
|
||||||
StringContent httpContent;
|
StringContent httpContent;
|
||||||
|
|
||||||
|
var requestUrl = url;
|
||||||
if (httpMethod == HttpMethod.Get)
|
if (httpMethod == HttpMethod.Get)
|
||||||
{
|
{
|
||||||
httpContent = BuildHttpContent("{}");
|
httpContent = BuildHttpContent("{}");
|
||||||
|
requestUrl = BuildQuery(url, content);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
httpContent = BuildHttpContent(content);
|
httpContent = BuildHttpContent(content);
|
||||||
}
|
}
|
||||||
|
|
||||||
var requestUrl = BuildQuery(url, content);
|
if (!Uri.TryCreate(requestUrl, UriKind.Absolute, out var uri))
|
||||||
var uri = new Uri(requestUrl);
|
{
|
||||||
|
var settings = _services.GetRequiredService<HttpHandlerSettings>();
|
||||||
|
var baseUri = new Uri(settings.BaseAddress);
|
||||||
|
uri = new Uri(baseUri, requestUrl);
|
||||||
|
}
|
||||||
|
|
||||||
return (uri, new HttpRequestMessage
|
return (uri, new HttpRequestMessage
|
||||||
{
|
{
|
||||||
RequestUri = uri,
|
RequestUri = uri,
|
||||||
|
|
@ -195,17 +195,4 @@ public class HandleHttpRequestFn : IFunctionCallback
|
||||||
|
|
||||||
return await response.Content.ReadAsStringAsync();
|
return await response.Content.ReadAsStringAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
private RichContent<IRichMessage> BuildRichContent(string? content)
|
|
||||||
{
|
|
||||||
var state = _services.GetRequiredService<IConversationStateService>();
|
|
||||||
|
|
||||||
var text = !string.IsNullOrEmpty(content) ? content : "Cannot get any response from the http request.";
|
|
||||||
return new RichContent<IRichMessage>
|
|
||||||
{
|
|
||||||
Recipient = new Recipient { Id = state.GetConversationId() },
|
|
||||||
Editor = EditorTypeEnum.Text,
|
|
||||||
Message = new TextMessage(text)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue