diff --git a/clients/README.md b/clients/README.md index b6964d2..f456603 100644 --- a/clients/README.md +++ b/clients/README.md @@ -6,7 +6,7 @@ | `resolvespec-python` | Python >= 3.11 | ResolveSpec, HeaderSpec, FunctionSpec, WebSocketSpec | yes (61 tests) | | `resolvespec-go` | Go | ResolveSpec, FunctionSpec | yes (`go 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`) | Wire behaviour is identical across clients; FunctionSpec server quirks are listed in each README. diff --git a/clients/resolvespec-cs/README.md b/clients/resolvespec-cs/README.md index 41488e5..4853af8 100644 --- a/clients/resolvespec-cs/README.md +++ b/clients/resolvespec-cs/README.md @@ -2,7 +2,7 @@ .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 diff --git a/clients/resolvespec-cs/src/FuncSpecClient.cs b/clients/resolvespec-cs/src/FuncSpecClient.cs index acdc588..84df0de 100644 --- a/clients/resolvespec-cs/src/FuncSpecClient.cs +++ b/clients/resolvespec-cs/src/FuncSpecClient.cs @@ -169,7 +169,9 @@ public sealed class FuncSpecClient }; if (list) { - resp.Headers.TryGetValues("Content-Range", out var cr); + // Content-Range is a content header in HttpClient; fall back to response headers. + IEnumerable? cr = null; + if (!resp.Content.Headers.TryGetValues("Content-Range", out cr)) resp.Headers.TryGetValues("Content-Range", out cr); r.Metadata = MetadataFrom(cr?.FirstOrDefault(), o); } return r; diff --git a/clients/resolvespec-cs/src/ResolveSpecClient.cs b/clients/resolvespec-cs/src/ResolveSpecClient.cs index c57e891..6b7bfb0 100644 --- a/clients/resolvespec-cs/src/ResolveSpecClient.cs +++ b/clients/resolvespec-cs/src/ResolveSpecClient.cs @@ -28,7 +28,7 @@ public sealed class ResolveSpecClient _ => Convert.ToString(id, System.Globalization.CultureInfo.InvariantCulture), }; - static string[]? BodyId(object? id) => id is IEnumerable e and not string ? e.ToArray() : null; + static string[]? BodyId(object? id) => id is IEnumerable e ? e.ToArray() : null; string Url(string schema, string entity, string? id) { diff --git a/clients/resolvespec-cs/tests/ClientTests.cs b/clients/resolvespec-cs/tests/ClientTests.cs index 4a88311..075f7fc 100644 --- a/clients/resolvespec-cs/tests/ClientTests.cs +++ b/clients/resolvespec-cs/tests/ClientTests.cs @@ -22,7 +22,8 @@ public class Stub : HttpMessageHandler Request = request; Body = request.Content == null ? "" : await request.Content.ReadAsStringAsync(ct); 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; } }