Skip to content

Latest commit

 

History

History
88 lines (65 loc) · 3.13 KB

README.md

File metadata and controls

88 lines (65 loc) · 3.13 KB

ASP .Net Core Extensions

ServiceCollection extensions

services.AddAll<T>(IEnumerable<Assembly>) registers all implementing classes of T in the given assemblies.

CultureUtil

The culture util provides a simple way to get the culture from a user based on a list of supported cultures. It supports a "fallback-to-child", meaning if your application supports "de-AT" and the user only supports "de-DE", the util returns "de-AT" as the best common language.

Examples:

public class AppSettings
{
    public CultureInfo DefaultCulture { get; set; } = null!;
    public CultureInfo[] SupportedCultures { get; set; } = null!;
}

Usage:

// Supported Cultures: de-AT,en-GB
// Default: de-AT
// Header: de-AT,en-US   Result: de-AT (match)
// Header: fr-FR,en-GB   Result: de-AT (match)
// Header: de-DE,en-US   Result: de-AT (first common language)
// Header: fr-FR,en-US   Result: en-GB (first common language)
// Header: fr-FR         Result: de-AT (no match, default)
CultureUtil.FromAcceptLanguageHeader(HttpContext, appSettings.SupportedCultures, appSettings.DefaultCulture)

Ignore paths Middleware

Returns 404 for all configured paths.

This is useful if you, for example, want to avoid a SPA to handle a path. A typo in an API-Url should result in 404 and should not be handled by the SPA.

Usage:

//For example right before the SPA
app.UseIgnorePaths("/api", "/swagger", "/hangfire");

Validation of MediatR requests

MediatR requests can be validated with a simple decorator. Internally it uses the same validator that is used by ASP.NET Core for the request validation.

To enable MediatR request validation, simply add the decorator RequestValidationDecorator to IRequestHandler:

// SimpleInjector
container.RegisterDecorator(typeof(IRequestHandler<,>), typeof(RequestValidationDecorator<,>));

// Scrutor
services.Decorate(typeof(IRequestHandler<,>), typeof(RequestValidationDecorator<,>));

You can then use the System.ComponentModel-attributes and the IValidatableObject-interface for validating your models. When model validation fails, a RequestValidationException gets thrown containing all the model validation errors. You might want to handle that one in your Exception filter, if you have one.

Example:

public class GetSomething : IValidatableObject
{
    [Required]
    public string Search { get; set; }

    [Range(1, 100)]
    public int MaxResults { get; set; } = 10;

    public DateTime From { get; set; }
    public DateTime To { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (From >= To)
            yield return new ValidationResult("From must be before To.", new[] { nameof(From), nameof(To) });
    }
}

This also works with records.