29 public Dictionary<string, object?>
Query {
get;
private set; } =
new Dictionary<string, object?>();
30 public Dictionary<string, object?>
Params {
get;
set; } =
new Dictionary<string, object?>();
56 HttpListenerContext listenerContext, JsonSerializerOptions jsonOptions,
60 HttpListenerRequest contextRequest = listenerContext.Request;
62 request.m_SerializerOptions = jsonOptions;
63 if (contextRequest.QueryString.Count > 0)
66 contextRequest.QueryString.AllKeys.ToDictionary(
70 object? value = contextRequest.QueryString[k]?.SafeDeserialize(contextRequest.QueryString[k], jsonOptions);
71 if (value is JsonElement element)
73 return element.ValueKind
switch
75 JsonValueKind.Number when element.TryGetInt32(out
int intValue) => intValue,
76 JsonValueKind.Number => element.GetDouble(),
77 JsonValueKind.String => element.GetString(),
78 JsonValueKind.True =>
true,
79 JsonValueKind.False =>
false,
80 JsonValueKind.Null =>
null,
81 JsonValueKind.Object => element.Deserialize<JsonObject>(jsonOptions),
82 _ =>
throw new InvalidOperationException($
"Unsupported JSON value: {value}"),
94 request.Query =
new Dictionary<string, object?>();
97 request.Body =
new SimpleRestBody(contextRequest, request.m_SerializerOptions);
98 request.Headers = contextRequest
99 .Headers?.AllKeys.ToDictionary(k => k, k => contextRequest.Headers[k])
100 .ToWebHeaderCollection();
101 request.ContentType = contextRequest.ContentType;
102 request.ContentLength = contextRequest.ContentLength64;
103 string pathAndQuery = contextRequest.Url?.PathAndQuery ??
"/";
105 (pathAndQuery.Contains(
'?') ? pathAndQuery?.Split(
"?")[0] : pathAndQuery) ??
"/";
106 Console.WriteLine(
"Endpoint:" + request.
Endpoint);
108 request.Endpoint = endpointFormatter?.GetEndpoint(request.
Endpoint) ?? request.
Endpoint;
109 Console.WriteLine(
"Endpoint:" + request.
Endpoint);
113 string? rawUrl = contextRequest.RawUrl;
114 string? path = rawUrl?.Split(
'?')[0];
115 string[]? pathSegments = path?.Split(
new[] {
'/' }, StringSplitOptions.RemoveEmptyEntries);
116 request.Path = pathSegments.Length <= 0 ?
new string[] {
"/" } : pathSegments;