代码之家  ›  专栏  ›  技术社区  ›  TanvirArjel

未能将约束引用“slugify”解析为类型

  •  1
  • TanvirArjel  · 技术社区  · 7 年前

    ASP.NET Core 2.2引入了一个选项,可以使用 Parameter transformer 如下:

    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 回复  |  直到 7 年前
        1
  •  3
  •   TanvirArjel    7 年前

    作为ASP.NET Core Documentation 说我必须配置 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();
            }
        }
    

    谢谢您。

    推荐文章