Перехватывать запросы GET и вызывать настраиваемое одиночное действие в ASP. NET Core 3 Endpoints - PullRequest
0 голосов
/ 26 марта 2020

Мне нужно перехватить GET-запросы в ASP. NET Core 3, и, если запрос соответствует некоторым условиям, мне нужно выполнить действие в контроллере (или странице). Всегда одно и то же действие.

Например, если запрос GET соответствует одному из следующих:

\page1
\page2
\page3
\abc
\def

Мне нужно выполнить Controllers\CustomController.CustomAction и передать информацию запроса в действие контроллера.

Я пытался создать CustomEndpointRouteBuilderExtensions, следуя указаниям в Маршрутизация документов Microsoft :

app.UseEndpoints(endpoints =>
{
    endpoints.MapCustom();
});

Для класса CustomEndpointRouteBuilderExtensions я думаю, что должен написать пользовательский EndpointDataSource, который содержит весь мой словарь маршрутов и соответствующий RequestDelegate, который указывает на мой CustomAction.

Я следовал примеру FrameworkEndpointDataSource , но он использует RequestDelegate, записанный непосредственно в Startup.cs .

Как создать конечную точку для добавления в CustomDataSource?

Заранее спасибо!

Обновление 1

I нашел другой способ: я изменяю запрос перед UseRouting ():

app.UseCustomEngine();
app.UseRouting();
public static IApplicationBuilder UseCustomEngine(this IApplicationBuilder builder)
{
    builder.Use(async (context, next) =>
    {
        if (dict.ContainsKey(context.Request.Path))
        {
            context.Request.Path = PathString.FromUriComponent("/CustomController/CustomAction");
            context.Request.QueryString = new QueryString($"?key=123");
        }
        await next.Invoke();
    });
    return builder;
}

Что вы думаете? Это хорошее решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...