Ссылка на ограничение 'slugify' не может быть преобразована в тип - PullRequest
0 голосов
/ 22 октября 2018

В ASP.NET Core 2.2 появилась опция для отключения URL-адреса маршрутизации с помощью Преобразователь параметров следующим образом:

routes.MapRoute(
    name: "default",
    template: "{controller=Home:slugify}/{action=Index:slugify}/{id?}");

Я сделал то же самое, как указано ниже:

routes.MapRoute(
    name: "default",
    template: "{controller:slugify}/{action:slugify}/{id?}",
    defaults: new { controller = "Home", action = "Index" });

Моя конфигурация маршрутизации в методе ConfigureServices выглядит следующим образом:

services.AddRouting(option =>
            {
                option.LowercaseUrls = true;
            });

, но получаются следующие ошибки:

InvalidOperationException: ссылка на ограничение «slugify» моглане разрешаться к типу.Зарегистрируйте тип ограничения с помощью «Microsoft.AspNetCore.Routing.RouteOptions.ConstraintMap».

и

RouteCreationException: при создании маршрута с именем «default» произошла ошибкаи шаблон '{controller: slugify} / {action: slugify} / {id?}'.

Может быть, я пропускаю что-нибудь еще!Любая помощь, пожалуйста!

1 Ответ

0 голосов
/ 22 октября 2018

Как ASP.NET Core Документация говорит, что я должен настроить Parameter transformer, используя ConstraintMap .Итак, я сделал следующее:

Конфигурация маршрутизации в методе ConfigureServices должна быть следующей:

services.AddRouting(option =>
            {
                option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer);
                option.LowercaseUrls = true;
            });

Тогда SlugifyParameterTransformer выглядит следующим образом:

public class SlugifyParameterTransformer : IOutboundParameterTransformer
    {
        public string TransformOutbound(object value)
        {
            // Slugify value
            return value == null ? null : Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();
        }
    }

Спасибо.

...