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