mirror of
https://github.com/bitechdev/ResolveSpec.git
synced 2026-10-10 07:16:27 +00:00
fix(clients): verify C# client, read Content-Range from content headers
This commit is contained in:
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
| `resolvespec-python` | Python >= 3.11 | ResolveSpec, HeaderSpec, FunctionSpec, WebSocketSpec | yes (61 tests) |
|
| `resolvespec-python` | Python >= 3.11 | ResolveSpec, HeaderSpec, FunctionSpec, WebSocketSpec | yes (61 tests) |
|
||||||
| `resolvespec-go` | Go | ResolveSpec, FunctionSpec | yes (`go test`) |
|
| `resolvespec-go` | Go | ResolveSpec, FunctionSpec | yes (`go test`) |
|
||||||
| `resolvespec-rs` | Rust | ResolveSpec, FunctionSpec | yes (`cargo test`) |
|
| `resolvespec-rs` | Rust | ResolveSpec, FunctionSpec | yes (`cargo test`) |
|
||||||
| `resolvespec-cs` | C# (.NET 8) | ResolveSpec, FunctionSpec | **not compiled** |
|
| `resolvespec-cs` | C# (.NET 8) | ResolveSpec, FunctionSpec | yes (`dotnet test`) |
|
||||||
| `resolvespec-dart` | Dart / Flutter | ResolveSpec, FunctionSpec | yes (`dart test`) |
|
| `resolvespec-dart` | Dart / Flutter | ResolveSpec, FunctionSpec | yes (`dart test`) |
|
||||||
|
|
||||||
Wire behaviour is identical across clients; FunctionSpec server quirks are listed in each README.
|
Wire behaviour is identical across clients; FunctionSpec server quirks are listed in each README.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
.NET 8 client for ResolveSpec (JSON body) and FunctionSpec. `System.Text.Json`, no other dependencies.
|
.NET 8 client for ResolveSpec (JSON body) and FunctionSpec. `System.Text.Json`, no other dependencies.
|
||||||
|
|
||||||
> Not compiled or tested yet (no .NET SDK was available). Run `dotnet test tests/` first.
|
> Tests run with `DOTNET_ROLL_FORWARD=Major` when only a newer runtime than 8.0 is installed.
|
||||||
|
|
||||||
## Clients
|
## Clients
|
||||||
|
|
||||||
|
|||||||
@@ -169,7 +169,9 @@ public sealed class FuncSpecClient
|
|||||||
};
|
};
|
||||||
if (list)
|
if (list)
|
||||||
{
|
{
|
||||||
resp.Headers.TryGetValues("Content-Range", out var cr);
|
// Content-Range is a content header in HttpClient; fall back to response headers.
|
||||||
|
IEnumerable<string>? cr = null;
|
||||||
|
if (!resp.Content.Headers.TryGetValues("Content-Range", out cr)) resp.Headers.TryGetValues("Content-Range", out cr);
|
||||||
r.Metadata = MetadataFrom(cr?.FirstOrDefault(), o);
|
r.Metadata = MetadataFrom(cr?.FirstOrDefault(), o);
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ public sealed class ResolveSpecClient
|
|||||||
_ => Convert.ToString(id, System.Globalization.CultureInfo.InvariantCulture),
|
_ => Convert.ToString(id, System.Globalization.CultureInfo.InvariantCulture),
|
||||||
};
|
};
|
||||||
|
|
||||||
static string[]? BodyId(object? id) => id is IEnumerable<string> e and not string ? e.ToArray() : null;
|
static string[]? BodyId(object? id) => id is IEnumerable<string> e ? e.ToArray() : null;
|
||||||
|
|
||||||
string Url(string schema, string entity, string? id)
|
string Url(string schema, string entity, string? id)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ public class Stub : HttpMessageHandler
|
|||||||
Request = request;
|
Request = request;
|
||||||
Body = request.Content == null ? "" : await request.Content.ReadAsStringAsync(ct);
|
Body = request.Content == null ? "" : await request.Content.ReadAsStringAsync(ct);
|
||||||
var r = new HttpResponseMessage(_status) { Content = new StringContent(_json, Encoding.UTF8, "application/json") };
|
var r = new HttpResponseMessage(_status) { Content = new StringContent(_json, Encoding.UTF8, "application/json") };
|
||||||
foreach (var (k, v) in _headers) r.Headers.TryAddWithoutValidation(k, v);
|
foreach (var (k, v) in _headers)
|
||||||
|
if (!r.Headers.TryAddWithoutValidation(k, v)) r.Content.Headers.TryAddWithoutValidation(k, v);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user