Supposons que j'ai un point de terminaison REST comme https: // localhost: 5000 / api / animals / cat / 1 et je souhaite rediriger tout l'URI qui contient / animals . Existe-t-il un moyen dans ASP .Net Core où je peux détecter dans la phase initiale elle-même, si l'appel contient la chaîne animals , puis modifier cet URI pour renvoyer un chemin différent avec quelques en-têtes ajoutés?
3 Réponses :
Les attributs le permettent. Supposons que votre contrôleur s'appelle GetAnimal , par exemple
[HttpGet]
[Route("animals/{name}/{id}")]
public ActionResult GetAnimal(string name, int id)
{
// add headers and redirect
}
Doit être [Route ("api / animals / {name} / {id}")] . Plus 1!
Correct, tant que la partie "api" n'est pas par défaut sur la route de la classe elle-même, car elle a tendance à provenir des modèles MVC.
Vérifiez cette fonctionnalité de routage dans le noyau asp.net: https: // docs.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-3.1#parameter-transformer-reference
Vous pouvez utiliser le middleware dans .net core:
public class MyMiddleware
{
private readonly RequestDelegate _next;
public MyMiddleware(RequestDelegate next)
{
_next = next;
}
public Task Invoke(HttpContext httpContext)
{
if (httpContext.Request.Path.ToString().Contains("animals"))
httpContext.Response.Redirect("/animals/category-animal");
return _next(httpContext);
}
}
// Extension method used to add the middleware to the HTTP request pipeline.
public static class MyMiddlewareExtensions
{
public static IApplicationBuilder UseMyMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<MyMiddleware>();
}
}
Ajoutez app.UseMyMiddleware () avant app.UseMvc () dans la classe de démarrage.
Vous pouvez utiliser Route Contraintes