Перенаправить ApiController на основе совпадения строки URI - PullRequest
1 голос
/ 27 января 2020

Предположим, у меня есть конечная точка REST, такая как https://localhost: 5000 / api / animals / cat / 1 и I wi sh, чтобы перенаправить весь URI, содержащий /animals. Есть ли способ в ASP. Net Core, где я могу определить на самом начальном этапе, содержит ли вызов строку animals, а затем изменить этот URI, чтобы он возвращал другой путь с добавлением нескольких заголовков?

Ответы [ 3 ]

4 голосов
/ 27 января 2020

Вы можете использовать промежуточное программное обеспечение в. net ядро:

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>();
        }

}

Добавить app.UseMyMiddleware () перед app.Use Mvc () в классе запуска.

1 голос
/ 27 января 2020
1 голос
/ 27 января 2020

Атрибуты позволяют это. Скажем, ваш контроллер называется GetAnimal например

[HttpGet]
[Route("animals/{name}/{id}")]
public ActionResult GetAnimal(string name, int id)
{

    // add headers and redirect

}
...