Мне нужно перехватить 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;
}
Что вы думаете? Это хорошее решение?