Полный маршрут с IRouteConstraint в ASP. Net Core 3 - PullRequest
0 голосов
/ 26 февраля 2020

Я использую. Net Core MVC 3.0, по умолчанию Endpoint Routing

Конфигурация маршрута по умолчанию:

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Link}/{action=Index}/{id?}"
        });

Это позволит мне делать CRUD операции над моими "ссылками"
например / Link / Edit / 123

Мне нужно уметь перехватывать и направлять любой запрос, который НЕ является операцией CRUD, на другой контроллер и действие
например, / blahblah
Так что я могу обрабатывать их так, как мне нравится (возможно, перенаправление, может быть, просто дружеское уведомление, может быть что угодно!)

Назад в моем. Net Framework MVC можно было бы добавить конфигурацию маршрута следующим образом:

        routes.MapRoute(
            name: "MyCatchAll",
            url: "{key}",
            defaults: new { controller = "MyController", action = "MyAction" },
            constraints: new { key = new MyConstraint() }
        );

(целью ограничения является просто дополнительная проверка, которую мне, возможно, понадобится использовать, например, для убедитесь, что blahblah соответствует ожидаемому значению)

Однако я не могу заставить это работать. Net Core MVC 3.0

Любые указатели будут наиболее цениться.

1 Ответ

0 голосов
/ 27 февраля 2020

Для asp. net core 3.0 вы можете использовать следующую конфигурацию:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "MyCatchAll",
        pattern: "{key}",
        defaults: new { controller = "MyController", action = "MyAction" },
        constraints: new { key = new MyConstraint() }
    );
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    endpoints.MapRazorPages();
});

MyConstraint.cs

public class MyConstraint: IRouteConstraint
{
    public bool Match(HttpContext httpContext,
                        IRouter router,
                        string parameterName,
                        RouteValueDictionary values,
                        RouteDirection routeDirection)
    {
        var url = values["key"];
        //your logic to check
        return true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...