Closed
Conversation
By default, RestSharp swallows deserialization and transport exceptions into RestResponse.ErrorException, and the generated ToApiResponse<T> in this template only carries ErrorText — the actual exception is dropped. Combined with a generated GetXxxAsync that returns Data directly, callers silently receive null on any deserialization failure (e.g. a required property missing in the upstream JSON). The error never reaches application logs or APM. Add an opt-in `throwOnAnyError` switch (default false, restsharp library only) that sets `ThrowOnAnyError = true` on RestClientOptions, making RestSharp rethrow the original ApiException(500, ...) that the generated deserializer already throws. The exception then propagates to the caller and into normal application error handling. Default kept off to preserve backwards compatibility — opt in when you want bugs to surface instead of silently producing null/[].
…gured Polly's ExecuteAndCapture catches the rethrown ApiException, so without this change the option is silently neutralized whenever RetryConfiguration.RetryPolicy != null: the exception ends up in RestResponse.ErrorException, which ToApiResponse discards. When throwOnAnyError is enabled, rethrow PolicyResult.FinalException from DeserializeRestResponseFromPolicyAsync so the contract is consistent across both the no-retry and retry paths. Default-off branch is byte-identical to the previous output.
Polly's PolicyResult.FinalException is null when Outcome is Failure but the failure type is ResultHandledByThisPolicy (e.g. a retry policy configured with .HandleResult(...) that gives up after N retries). Throwing it directly would NRE; fall back to InvalidOperationException so the option still surfaces an error. Also restores the trailing whitespace on the if line so existing restsharp samples don't all need regenerating.
…ud/openapi-generator into mjansrud-csharp-throw-on-any-error
5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR checklist
Commit all changed files.
This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example
./bin/generate-samples.sh bin/configs/java*.IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
master(upcoming7.x.0minor release - breaking changes with fallbacks),8.0.x(breaking changes without fallbacks)"fixes #123"present in the PR description)Summary by cubic
Adds an opt-in
throwOnAnyErroroption for C#RestSharpclients to surface deserialization and transport errors by throwing them, including when aPollyretry policy is used. Default stays off to preserve current behavior.New Features
throwOnAnyError(restsharp only, default false); documented in csharp generator options.RestClientOptions.ThrowOnAnyError = trueand rethrowPolicyResult.FinalExceptionin the retry path so errors reach callers and logs.throwOnAnyError: true.Migration
throwOnAnyError: trueunderadditionalPropertiesin your config, or pass--additional-properties throwOnAnyError=true.Written for commit 13e4897. Summary will update on new commits.