Attributs personnalisés sur l'API .NET 6 Core
Les attributs personnalisés sont vraiment une bonne chose à utiliser, j’ai commencé à les utiliser très récemment, car ils me permettent d’en créer un seul et de les réutiliser soit sur le contrôleur, soit sur la classe, soit sur la méthode elle-même.
Ils sont vraiment utiles lorsque vous souhaitez effectuer des tâches de sécurité, comme vérifier les en-têtes ou vérifier la valeur d’un paramètre dont vous avez absolument besoin.
Dans mon cas, nous allons l’utiliser sur un projet API .NET Core, où nous allons vérifier si toutes les requêtes contiennent un certain en-tête.
# En-têteCheckAttribute
Donc, après avoir créé notre superbe API .NET Core, créons un dossier pour stocker nos données, car nous aimons utiliser des dossiers.

Et puis nous allons ajouter la logique à notre classe HeaderCheckAttribute .
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
namespace DotNet6CustomAttribute.Attributes
{
public class HeaderCheckAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
// Get all headers
var headers = context.HttpContext.Request.Headers;
// Check if headers has x-dotnet-6-custom-attribute
if (!headers.ContainsKey("x-dotnet-6-custom-attribute"))
{
context.Result = new BadRequestObjectResult("The header x-dotnet-6-custom-attribute is missing");
}
else if (string.IsNullOrEmpty(headers["x-dotnet-6-custom-attribute"]))
{
context.Result = new BadRequestObjectResult("The header x-dotnet-6-custom-attribute can't be null or empty");
}
base.OnActionExecuting(context);
}
}
}
Fondamentalement, la logique est la suivante : il vérifie d’abord un en-tête avec la clé x-dotnet-6-custom-attribute et s’il est là, il vérifie s’il a des valeurs.
Si ces deux expressions sont vraies, cela renverra un BadRequestObjectResult avec un certain message.
L’ajouter au contrôleur
Nous pouvons ajouter cette logique à plusieurs endroits, nous pouvons l’ajouter directement à l’ensemble du contrôleur, ou nous pouvons l’ajouter à certaines méthodes, nous allons l’ajouter d’abord aux méthodes puis à l’ensemble du contrôleur.
Alors décorons la classe WeatherForecastController avec eux.
using DotNet6CustomAttribute.Attributes;
using Microsoft.AspNetCore.Mvc;
namespace DotNet6CustomAttribute.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet]
[Route("GetWeatherForecastWithCheck")]
[HeaderCheckAttribute]
public IEnumerable<WeatherForecast> GetWithCheck()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
[HttpGet]
[Route("GetWeatherForecastWithoutCheck")]
public IEnumerable<WeatherForecast> GetWithoutCheck()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
}
Lançons le projet !

Nous avons 2 fonctions là-dedans : GetWeatherForecastWithCheck et GetWeatherForecastWithoutCheck, l’une d’elles échouera et l’autre non, mais vérifions cela sur Swagger !

Comme vous pouvez le voir, l’un des renvoie une erreur 400 avec notre message et l’autre renvoie les valeurs. Maintenant, pour tester complètement cela, exécutons Postman et ajoutons un en-tête afin que nous puissions également voir les données en utilisant GetWeatherForecastWithCheck.
Facteur
Maintenant exécuté sur Postman, nous ajoutons l’en-tête et nous voyons que le message d’erreur a changé, puisque maintenant nous fournissons l’en-tête mais il n’a aucune valeur

Si on y ajoute une valeur, on obtient enfin les valeurs !

C’est ça
Et bien c’est tout ! Assez simple, non ? Eh bien, vous savez maintenant comment créer un attribut et l’attribuer aux méthodes et aux contrôleurs !
Amusez-vous avec eux !
#Code
L’intégralité de ce projet est sur Github et vous pouvez le trouver ici !
Si vous avez des problèmes ou des questions, n’hésitez pas à me contacter sur n’importe quel réseau social à @emimontesdeoca (sur Twitter, c’est en fait @emimontesdeocaa avec deux aa à la fin). Vous pouvez également retrouver la plupart de mes réseaux sociaux sur l’en-tête du blog.
J’espère que vous avez aimé le message ! Ouais !