PERRY3D SOFTWARE, SIMULATION & WEB DEVELOPMENT

NuGet libraries / Perry3D

Built to be reused.

Practical .NET packages I publish and maintain: identity protection, text inspection, unit conversion and secure route permissions. Pick the tool that fits your application.

11 packages · 4 toolkits View all on NuGet ↗
01 / TOOLKITPERRY3D · .NET

Unclaimable

Protect usernames, identifiers and email identities against reserved names, impersonation and confusing lookalikes.

WHERE IT FITS Use it when users create accounts, choose public handles or register email identities.

LIVE PLAYGROUNDREAL PACKAGE ENGINE
var checker = new Checker();
var result = checker.Check("administrator");
Console.WriteLine(result.IsClaimable);

Email identity and domain lookalikes

Explore strict existing-address checks, relaxed user registration, and strict issued addresses. Protected example domains: lidl.nl and example.com.

Run the email demo to view syntax, local-part and domain diagnostics.
var options = EmailOptions.ForUserRegistration();
options.ProtectedDomains.Add("example.com");
var email = new EmailChecker(options).CheckExistingAddress("support@example.com");
Run the demo to see its result.
Developer integration & companion packages

Unclaimable.AspNetCore wires the checker into dependency injection, Unclaimable.FluentValidation adds validation extensions, and Unclaimable.Extended adds optional identity datasets. The email demo above uses Unclaimable.Email.

builder.Services.AddUnclaimable();
 
// In a FluentValidation validator, with the companion installed:
// RuleFor(x => x.Username).MustBeClaimable();

// Optional Extended data must be enabled explicitly:
// options.UseExtendedData();

Packages in this toolkit

02 / TOOLKITPERRY3D · .NET

TextInspector

Inspect text using built-in detectors, precise evidence and explainable risk scores suitable for reporting or moderation interfaces.

WHERE IT FITS Use it to review user-submitted text and show why a piece of content was flagged.

LIVE PLAYGROUNDREAL PACKAGE ENGINE
var inspector = TextInspectorEngine.Create();
var report = inspector.CreateReport("Contact us at hello@example.com.");
Console.WriteLine(report.RiskAssessment.TotalRiskPoints);
Run the demo to see its result.
Developer integration & companion packages

The ASP.NET Core companion registers the inspection services. The highlight demo uses exact original-source offsets; masking and disabled rules are executed by the engine.

builder.Services.AddTextInspector(options =>
    options.EnableMasking = true);

// Inject ITextInspectorService for application reports.
// Inspect with IncludeHighlightSpans and IncludeSourceLocations.

Packages in this toolkit

03 / TOOLKITPERRY3D · .NET

UnitTools

Convert physical and engineering units with strongly typed quantities, efficient numeric APIs and optional serialization and analyzer support.

WHERE IT FITS Use it in calculators, engineering applications, data pipelines and measurement-heavy APIs.

LIVE PLAYGROUNDREAL PACKAGE ENGINE

Unit options are loaded from the installed UnitTools package.

double metres = UnitToolsLength.Convert(
    4d, UnitToolsLengthUnit.Kilometer, UnitToolsLengthUnit.Meter);

Dynamic conversion / composite expressions

Try unit aliases and compatible composite dimensions.
double speed = UnitToolsDynamic.Convert("36 km/h", "m/s");
// Optional companion packages add JSON serialization and analyzers.
Run the demo to see its result.
Developer integration & companion packages

The catalog converter supports every unit registered in the installed version. The dynamic converter accepts names and aliases, while the expression mode handles compatible composites. Typed quantities, exact-decimal conversion, analyzers and JSON integration are compile-time examples.

var length = Length<decimal>.FromKilometres(4m);
decimal metres = length.Metres;

decimal exact = UnitToolsExact.Convert(
    1m, UnitToolsLengthUnit.Inch, UnitToolsLengthUnit.Foot);

// Optional UnitTools.SystemTextJson: JSON converters.
// Optional UnitTools.Analyzers: compile-time guidance.

Packages in this toolkit

04 / TOOLKITPERRY3D · .NET

AutoPolicy

Apply automatic, default-deny route permission policies to ASP.NET Core Razor Pages.

WHERE IT FITS Use it when every Razor Pages route should require an explicit authorization decision.

LIVE PLAYGROUNDSIMULATOR

Choose a role and a route to explore default-deny authorization. This is a safe simulation; it never changes real access permissions.

// Illustrative rules:
// /Account/Login allows anonymous visitors
// /Staff/* allows Staff and Admin
// /Admin/* allows Admin
// Everything else is denied by default
Run the demo to see its result.
Developer integration & companion packages

AutoPolicy integrates into the host ASP.NET Core authorization pipeline. The interactive example is a simulator only; no website permissions are modified.

builder.Services.AddAutoPolicy(options =>
{
    options.AllowAnonymous("/Account/Login", "/Error");
    options.DefineGroup("StaffPages", g => g.Include("/Staff/*"));
    options.DefineRole("Staff", r => r.IncludeGroup("StaffPages"));
});

// Matching denies take precedence over grants;
// undiscovered/unregistered permissions fail closed.

Packages in this toolkit

Want to see the latest versions, framework support and installation instructions?

Explore my NuGet profile ↗
Back to home