1
votes

Rediriger ApiController en fonction de la correspondance de chaîne URI

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?


1 commentaires

Vous pouvez utiliser Route Contraintes


3 Réponses :


1
votes

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

}


2 commentaires

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.



1
votes

0 commentaires

4
votes

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.


0 commentaires