Skip to content

Fast.UnifyResult

Public members, parameters, returns, and exceptions

Targets: net8.0;net9.0;net10.0.

Contract and constraints

MVC response wrapping, model validation and friendly exceptions. AddUnifyResult() includes AddDataValidation() and AddFriendlyException(), enables result handling and registers response filters/status middleware. It does not automatically wrap arbitrary Minimal API results. Validation suppresses the native invalid-model filter and implicit Required for non-nullable references; explicitly annotate required inputs. RestfulResult<T> contains Success, nullable Code, Message, Data and Timestamp. Code is a body field, not necessarily the HTTP status. Discovered providers can change the response protocol. Providers and global exception handlers are singletons and must not hold request state. NonUnifyAttribute and NonValidationAttribute opt out of their respective flows. Return business objects from controllers and avoid wrapping the same result twice.

Installation and examples

Install the package

bash
dotnet add package Fast.UnifyResult

Example 1

csharp
using Fast.UnifyResult;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Builder;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddUnifyResult();

var app = builder.Build();
app.MapControllers();
app.Run();

Example 2

csharp
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/notes")]
public sealed class NotesController : ControllerBase
{
    [HttpPost]
    public NoteOutput Preview([FromBody] NoteInput input) => new(input.Title.Trim());
}

public sealed class NoteInput
{
    [Required, StringLength(80, MinimumLength = 1)]
    public string Title { get; set; } = "";
}

public sealed record NoteOutput(string Title);

Web-host examples belong in a consumer project using Microsoft.NET.Sdk.Web and a supported .NET target. IaaS examples can be used in an ordinary class library. Registration precedes builder.Build(); configure middleware and endpoints before app.Run(). Samples retain their original code and comments. No host, external service, database operation or client generator was run, and these snippets have not been compiled in this update.

Source reference