RSCG – Refit
| name | Refit |
| nuget | https://www.nuget.org/packages/Refit/ |
| link | https://github.com/reactiveui/refit |
| author | ReactiveUI |
Generates code for retrieving data from HTTP API
This is how you can use Refit .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Refit" Version="7.0.0" />
</ItemGroup>
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
</Project>
The code that you will use is
Console.WriteLine("Hello,World!"); var gitHubApi = RestService.For<IFindPosts>("https://jsonplaceholder.typicode.com/"); var data = await gitHubApi.GetPost(1); Console.WriteLine(data.Title);
namespace RefitDemo;
public record Post
{
public int Id { get; set; }
public string Title { get; set; }
}
namespace RefitDemo;
public interface IFindPosts
{
[Get("/posts/{nr}")]
Task<Post> GetPost(long nr);
}
The code that is generated is
#pragma warning disable
namespace Refit.Implementation
{
/// <inheritdoc />
[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
[global::System.Diagnostics.DebuggerNonUserCode]
[global::RefitDemoRefitInternalGenerated.PreserveAttribute]
[global::System.Reflection.Obfuscation(Exclude=true)]
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
internal static partial class Generated
{
}
}
#pragma warning restore
#nullable enable
#pragma warning disable
namespace Refit.Implementation
{
partial class Generated
{
/// <inheritdoc />
[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
[global::System.Diagnostics.DebuggerNonUserCode]
[global::RefitDemoRefitInternalGenerated.PreserveAttribute]
[global::System.Reflection.Obfuscation(Exclude=true)]
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
partial class RefitDemoIFindPosts
: global::RefitDemo.IFindPosts
{
/// <inheritdoc />
public global::System.Net.Http.HttpClient Client { get; }
readonly global::Refit.IRequestBuilder requestBuilder;
/// <inheritdoc />
public RefitDemoIFindPosts(global::System.Net.Http.HttpClient client,global::Refit.IRequestBuilder requestBuilder)
{
Client = client;
this.requestBuilder = requestBuilder;
}
/// <inheritdoc />
public global::System.Threading.Tasks.Task<global::RefitDemo.Post> GetPost(long @nr)
{
var ______arguments = new object[] { @nr };
var ______func = requestBuilder.BuildRestResultFuncForMethod("GetPost",new global::System.Type[] { typeof(long) } );
return (global::System.Threading.Tasks.Task<global::RefitDemo.Post>)______func(this.Client,______arguments);
}
/// <inheritdoc />
global::System.Threading.Tasks.Task<global::RefitDemo.Post> global::RefitDemo.IFindPosts.GetPost(long @nr)
{
var ______arguments = new object[] { @nr };
var ______func = requestBuilder.BuildRestResultFuncForMethod("GetPost",new global::System.Type[] { typeof(long) } );
return (global::System.Threading.Tasks.Task<global::RefitDemo.Post>)______func(this.Client,______arguments);
}
}
}
}
#pragma warning restore
#pragma warning disable
namespace RefitDemoRefitInternalGenerated
{
[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
[global::System.AttributeUsage (global::System.AttributeTargets.Class | global::System.AttributeTargets.Struct | global::System.AttributeTargets.Enum | global::System.AttributeTargets.Constructor | global::System.AttributeTargets.Method | global::System.AttributeTargets.Property | global::System.AttributeTargets.Field | global::System.AttributeTargets.Event | global::System.AttributeTargets.Interface | global::System.AttributeTargets.Delegate)]
sealed class PreserveAttribute : global::System.Attribute
{
//
// Fields
//
public bool AllMembers;
public bool Conditional;
}
}
#pragma warning restore
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/Refit
Leave a Reply