Skip to content

Releases: reactiveui/refit

11.2.0

18 Jun 00:26
54a8e62

Choose a tag to compare

🗞️ What's Changed

🐛 Fixes

🔗 Full Changelog: v11.1.0...v11.2.0

🙌 Contributions

💖 Thanks to all the contributors: @glennawatson

11.1.0

17 Jun 07:17
5f67752

Choose a tag to compare

🗞️ What's Changed

🐛 Fixes

🧹 General Changes

📝 Documentation

📦 Dependencies

🔗 Full Changelog: v11.0.1...v11.1.0

🙌 Contributions

🌱 New contributors since the last release: @HulinCedric
💖 Thanks to all the contributors: @ChrisPulman, @glennawatson, @HulinCedric, @PressXtoChris

🤖 Automated services that contributed: @renovate[bot]

11.0.1

04 Jun 03:27
8652c5e

Choose a tag to compare

🗞️ What's Changed

🧹 General Changes

📌 Other

🔗 Full Changelog: v11.0.0...11.0.1

🙌 Contributions

🌱 New contributors since the last release: @xIceFox
💖 Thanks to all the contributors: @glennawatson, @xIceFox

11.0.0

03 Jun 13:36

Choose a tag to compare

⚠️ This is a breaking release (major: 10.x → 11.0.0)

11.0.0 reworks Refit's error/exception model and tightens interface validation. Most apps will compile, but code that inspects ApiResponse.Error, reads StatusCode, or catches transport exceptions around Refit calls will need changes. These are the same breaking changes that briefly shipped in the now‑delisted 10.1.7 and were reported by the community in #2114.

💡 Need a drop‑in, non‑breaking replacement for 10.1.6? Use 10.2.0 — it is 10.1.6 re‑signed with a valid certificate (the 10.1.6 cert was revoked, see #2114). Move to 11.0.0 when you're ready to adopt the changes below.

💥 What changed & how to migrate

1. ApiResponse<T>.Error is now ApiExceptionBase? (was ApiException?) (#2052)
A new abstract base ApiExceptionBase now sits under both ApiException and the new ApiRequestException. ApiExceptionBase does not expose Content / HasContent — those still live on ApiException.

// before
string? body = response.Error?.Content;

// after — narrow to ApiException first
if (response.Error is ApiException apiEx)
{
    string? body = apiEx.Content;   // Content/HasContent are on ApiException
}

2. New ApiRequestException wraps transport/connection failures (#2052)
Exceptions thrown by HttpClient.SendAsync before a response arrives — HttpRequestException (DNS/host unreachable), TaskCanceledException (timeouts), etc. — are now wrapped in ApiRequestException : ApiExceptionBase, carrying the full request context. For ApiResponse<T> return types these are now surfaced via .Error instead of only being thrown, so you no longer need a separate try/catch and IsSuccessful check.

// catching transport errors: catch the base (or ApiRequestException) now
catch (ApiExceptionBase ex) { /* covers ApiException + ApiRequestException */ }

3. ApiResponse<T>.StatusCode is now nullable (HttpStatusCode?) (#2052)
When the request never reached the server there is no status code. Code that assumed a non‑null value must handle null:

int code = (int)response.StatusCode;          // ❌ won't compile / may throw
int? code = (int?)response.StatusCode;         // ✅ handle the no-response case

4. Stricter interface validation + enum name handling (#2068)
Synchronous return types are now only permitted for generated/non‑public interface members (RestMethodInfo enforces the rule), and the System.Text.Json enum converter now maps serialized names both ways (including JsonStringEnumMemberName on .NET 9+). Interfaces that previously relied on unsupported sync members may now fail generation.


🗞️ What's Changed

✨ Features & Enhancements

⚡ Performance

  • Replace Activator.CreateInstance with direct constructor in ApiResponse.Create by @james-s-tayler in #2071
  • Avoid extra allocations when deserializing with Newtonsoft.Json by @yzhoholiev in #2085

🐛 Fixes

🧹 General & Housekeeping

📦 Dependencies

🙌 New Contributors

💖 Contributions

Thanks to everyone who contributed: @ChrisPulman, @PressXtoChris, @james-s-tayler, @yzhoholiev, @dyatlov-a

🤖 Automated services that contributed: @renovate[bot]

🔗 Full Changelog: v10.2.0...v11.0.0

10.2.0

21 Mar 01:51

Choose a tag to compare

NOTE

This is a re-release of v10.1.6 which had a certificate revoked.

🗞️ What's Changed

🐛 Fixes

🧹 General Changes

📦 Dependencies

📌 Other

🔗 Full Changelog: 10.0.1...10.1.6

🙌 Contributions

💖 Thanks to all the contributors: @ChrisPulman

🤖 Automated services that contributed: @renovate[bot]

10.0.1

06 Feb 01:19
0155eeb

Choose a tag to compare

🗞️ What's Changed

♻️ Refactoring

🐛 Fixes

🧹 General Changes

📦 Dependencies

🔗 Full Changelog: 9.0.2...10.0.1

🙌 Contributions

🌱 New contributors since the last release: @baynezy, @zms9110750
💖 Thanks to all the contributors: @baynezy, @ChrisPulman, @glennawatson, @zms9110750

🤖 Automated services that contributed: @renovate[bot]

9.0.2

30 Nov 01:49
1e4e9c5

Choose a tag to compare

🗞️ What's Changed

✨ Features

🐛 Fixes

🧹 General Changes

✅ Tests

📦 Dependencies

📌 Other

🔗 Full Changelog: 8.0.0...9.0.2

🙌 Contributions

🌱 New contributors since the last release: @AldeRoberge, @DavidGarton8, @derekm, @fubar-coder, @KodamaSakuno, @Krzysztof318, @mark-pro, @rdeveen
💖 Thanks to all the contributors: @AldeRoberge, @ChrisPulman, @DavidGarton8, @derekm, @fubar-coder, @Glenn, @glennawatson, @KodamaSakuno, @Krzysztof318, @mark-pro, @rdeveen, @TimothyMakkison

🤖 Automated services that contributed: @renovate[bot]

7.2.22

08 Nov 13:37
8cb6f75

Choose a tag to compare

Fixes:

8.0.0

03 Nov 03:20
8f9663a

Choose a tag to compare

Features

Refactoring

Fixes

General Changes

Dependencies

Contributions

New contributors since the last release: @mithileshz, @ted-ccm, @teddyassefa
Thanks to all the contributors: @ChrisPulman, @marcominerva, @mithileshz, @sguryev, @ted-ccm, @teddyassefa, @TimothyMakkison

The following automated services have also contributed to this release: @renovate[bot]

7.2.1

19 Sep 00:29
f68cc31

Choose a tag to compare

What's Changed

Full Changelog: 7.2.0...7.2.1