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
dotnet add package Fast.UnifyResultExample 1
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
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.
