This commit is contained in:
2026-04-19 20:43:15 +03:30
parent 96c18db58e
commit cd385d36de
2 changed files with 132 additions and 23 deletions
+8 -1
View File
@@ -1,4 +1,5 @@
using System; using System;
using System.IO;
using System.Collections.Generic; using System.Collections.Generic;
using System.Net.Http; using System.Net.Http;
using System.Threading; using System.Threading;
@@ -107,6 +108,7 @@ namespace xIdentityService.Interfaces
/// Access a Get Request Stream as AsyncEnumerable ... /// Access a Get Request Stream as AsyncEnumerable ...
/// </summary> /// </summary>
/// <param name="endpoint"></param> /// <param name="endpoint"></param>
/// <param name="bufferLength"></param>
/// <param name="addXPoweredValue"></param> /// <param name="addXPoweredValue"></param>
/// <param name="tokens"></param> /// <param name="tokens"></param>
/// <param name="@params"></param> /// <param name="@params"></param>
@@ -115,8 +117,9 @@ namespace xIdentityService.Interfaces
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <returns></returns> /// <returns></returns>
IAsyncEnumerable<T> StreamData<T>( Task<Stream> StreamData(
Enum endpoint, Enum endpoint,
int bufferLength = 8194,
bool addXPoweredValue = true, bool addXPoweredValue = true,
XTokenResponse tokens = null, XTokenResponse tokens = null,
IDictionary<string, string> @params = null, IDictionary<string, string> @params = null,
@@ -168,11 +171,13 @@ namespace xIdentityService.Interfaces
/// and Query Strings Attach ... /// and Query Strings Attach ...
/// </summary> /// </summary>
/// <param name="endpoint"></param> /// <param name="endpoint"></param>
/// <param name="attachBaseUrl"></param>
/// <param name="@params"></param> /// <param name="@params"></param>
/// <param name="queryStrings"></param> /// <param name="queryStrings"></param>
/// <returns></returns> /// <returns></returns>
string PrepareUrl( string PrepareUrl(
Enum endpoint, Enum endpoint,
bool attachBaseUrl = false,
IDictionary<string, string> @params = null, IDictionary<string, string> @params = null,
IDictionary<string, string> queryStrings = null IDictionary<string, string> queryStrings = null
); );
@@ -182,11 +187,13 @@ namespace xIdentityService.Interfaces
/// and Query Strings Attach ... /// and Query Strings Attach ...
/// </summary> /// </summary>
/// <param name="url"></param> /// <param name="url"></param>
/// <param name="attachBaseUrl"></param>
/// <param name="@params"></param> /// <param name="@params"></param>
/// <param name="queryStrings"></param> /// <param name="queryStrings"></param>
/// <returns></returns> /// <returns></returns>
string PrepareUrl( string PrepareUrl(
string url, string url,
bool attachBaseUrl = false,
IDictionary<string, string> @params = null, IDictionary<string, string> @params = null,
IDictionary<string, string> queryStrings = null IDictionary<string, string> queryStrings = null
); );
+124 -22
View File
@@ -1,4 +1,5 @@
using System; using System;
using System.IO;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net.Http; using System.Net.Http;
@@ -19,6 +20,8 @@ using xIdentityService.Constants;
using xIdentityService.Interfaces; using xIdentityService.Interfaces;
using xIdentityService.Models; using xIdentityService.Models;
using xIdentityService.Extensions; using xIdentityService.Extensions;
using System.Diagnostics.Tracing;
using MySqlX.XDevAPI.Common;
namespace xIdentityService.Providers namespace xIdentityService.Providers
{ {
@@ -132,7 +135,7 @@ namespace xIdentityService.Providers
// //
httpClient.DefaultRequestHeaders httpClient.DefaultRequestHeaders
.Add( .Add(
XAuthorization.AccessToken, XAuthorization.Header,
$"{XAuthentication.BEARER} {tokens.AccessToken}"); $"{XAuthentication.BEARER} {tokens.AccessToken}");
} }
@@ -257,9 +260,9 @@ namespace xIdentityService.Providers
{ {
// //
var url = PrepareUrl( var url = PrepareUrl(
endpoint, @params: @params,
@params, endpoint: endpoint,
queryStrings queryStrings: queryStrings
); );
// //
@@ -456,6 +459,7 @@ namespace xIdentityService.Providers
/// Access a Get Request Stream as AsyncEnumerable ... /// Access a Get Request Stream as AsyncEnumerable ...
/// </summary> /// </summary>
/// <param name="endpoint"></param> /// <param name="endpoint"></param>
/// <param name="bufferLength"></param>
/// <param name="addXPoweredValue"></param> /// <param name="addXPoweredValue"></param>
/// <param name="tokens"></param> /// <param name="tokens"></param>
/// <param name="@params"></param> /// <param name="@params"></param>
@@ -464,8 +468,9 @@ namespace xIdentityService.Providers
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <returns></returns> /// <returns></returns>
public async IAsyncEnumerable<T> StreamData<T>( public async Task<Stream> StreamData(
Enum endpoint, Enum endpoint,
int bufferLength = 8194,
bool addXPoweredValue = true, bool addXPoweredValue = true,
XTokenResponse tokens = null, XTokenResponse tokens = null,
IDictionary<string, string> @params = null, IDictionary<string, string> @params = null,
@@ -477,9 +482,10 @@ namespace xIdentityService.Providers
{ {
// //
var url = PrepareUrl( var url = PrepareUrl(
endpoint, @params: @params,
@params, endpoint: endpoint,
queryStrings attachBaseUrl: true,
queryStrings: queryStrings
); );
var client = GetHttpClient(tokens); var client = GetHttpClient(tokens);
if (addXPoweredValue) if (addXPoweredValue)
@@ -488,7 +494,8 @@ namespace xIdentityService.Providers
client.DefaultRequestHeaders client.DefaultRequestHeaders
.Add( .Add(
XAuthorization.XPoweredBy, XAuthorization.XPoweredBy,
XPoweredValue); XPoweredValue
);
} }
// //
@@ -499,16 +506,92 @@ namespace xIdentityService.Providers
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/event-stream")); new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/event-stream"));
// //
using (var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, cancellationToken)) var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, cancellationToken);
{ response.EnsureSuccessStatusCode();
//
response.EnsureSuccessStatusCode(); //
var stream = await response.Content.ReadAsStreamAsync(); var stream = await response.Content.ReadAsStreamAsync();
await foreach (var item in stream.ToAsyncEnumerable<T>(cancellationToken: cancellationToken))
{ //
yield return item; return stream;
}
} // using (var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, cancellationToken))
// {
// //
// int readedBuffers = 0;
// response.EnsureSuccessStatusCode();
// var buffer = new byte[bufferLength];
// var stream = await response.Content.ReadAsStreamAsync();
// //
// while ((readedBuffers = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0)
// {
// //
// var content = buffer.FromBytes();
// Console.WriteLine(content);
// }
// // await foreach (var message in stream) {
// // Console.WriteLine(message);
// // }
// // await foreach (var item in stream.ToAsyncEnumerable<byte[]>(cancellationToken: cancellationToken))
// // {
// // //
// // Console.WriteLine(item);
// // // T value = item.IsNull()
// // // ? default(T)
// // // : item.FromBytes().FromJSON<T>();
// // // //
// // // yield return value;
// // }
// }
///
///
///
///
//
// var eventSource = new EventSource(url);
// // eventSource.
// // var client = GetHttpClient(tokens);
// // if (addXPoweredValue)
// // {
// // //
// // client.DefaultRequestHeaders
// // .Add(
// // XAuthorization.XPoweredBy,
// // XPoweredValue);
// // }
// // //
// // // For SSE, you might want to set the Accept header, though not strictly necessary for just streaming
// // client.DefaultRequestHeaders.Accept.Clear();
// // client.DefaultRequestHeaders.Accept
// // .Add(
// // new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/event-stream"));
// // //
// // using (var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, cancellationToken))
// // {
// // //
// // response.EnsureSuccessStatusCode();
// // var stream = await response.Content.ReadAsStreamAsync();
// // await foreach (var item in stream.ToAsyncEnumerable<byte[]>(cancellationToken: cancellationToken))
// // {
// // //
// // T value = item.IsNull()
// // ? default(T)
// // : item.FromBytes().FromJSON<T>();
// // //
// // yield return value;
// // }
// // }
} }
/// <summary> /// <summary>
@@ -748,11 +831,13 @@ namespace xIdentityService.Providers
/// and Query Strings Attach ... /// and Query Strings Attach ...
/// </summary> /// </summary>
/// <param name="endpoint"></param> /// <param name="endpoint"></param>
/// <param name="attachBaseUrl"></param>
/// <param name="@params"></param> /// <param name="@params"></param>
/// <param name="queryStrings"></param> /// <param name="queryStrings"></param>
/// <returns></returns> /// <returns></returns>
public string PrepareUrl( public string PrepareUrl(
Enum endpoint, Enum endpoint,
bool attachBaseUrl = false,
IDictionary<string, string> @params = null, IDictionary<string, string> @params = null,
IDictionary<string, string> queryStrings = null IDictionary<string, string> queryStrings = null
) )
@@ -764,9 +849,10 @@ namespace xIdentityService.Providers
// //
// Filling Parmas and Query Strings of Url ... // Filling Parmas and Query Strings of Url ...
url = PrepareUrl( url = PrepareUrl(
url, url: url,
@params, @params: @params,
queryStrings queryStrings: queryStrings,
attachBaseUrl: attachBaseUrl
); );
// //
@@ -778,15 +864,31 @@ namespace xIdentityService.Providers
/// and Query Strings Attach ... /// and Query Strings Attach ...
/// </summary> /// </summary>
/// <param name="url"></param> /// <param name="url"></param>
/// <param name="attachBaseUrl"></param>
/// <param name="@params"></param> /// <param name="@params"></param>
/// <param name="queryStrings"></param> /// <param name="queryStrings"></param>
/// <returns></returns> /// <returns></returns>
public string PrepareUrl( public string PrepareUrl(
string url, string url,
bool attachBaseUrl = false,
IDictionary<string, string> @params = null, IDictionary<string, string> @params = null,
IDictionary<string, string> queryStrings = null IDictionary<string, string> queryStrings = null
) )
{ {
//
if (attachBaseUrl)
{
//
var baseUrl = BaseUrl;
if (!baseUrl.EndsWith("/"))
{
baseUrl = $"{baseUrl}/";
}
//
url = $"{baseUrl}{url}";
}
// //
// Add Route Payloads ... // Add Route Payloads ...
if (!@params.IsNull() && @params.Count > 0) if (!@params.IsNull() && @params.Count > 0)