首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将约束引用'slugify‘解析为类型

无法将约束引用'slugify‘解析为类型
EN

Stack Overflow用户
提问于 2018-10-22 04:28:03
回答 1查看 7.2K关注 0票数 2

ASP.NET Core2.2引入了一个使用参数变压器对路由url进行泄密的选项,如下所示:

代码语言:javascript
复制
routes.MapRoute(
    name: "default",
    template: "{controller=Home:slugify}/{action=Index:slugify}/{id?}");

我所做的同样的事情如下:

代码语言:javascript
复制
routes.MapRoute(
    name: "default",
    template: "{controller:slugify}/{action:slugify}/{id?}",
    defaults: new { controller = "Home", action = "Index" });

我在ConfigureServices方法中的路由配置如下:

代码语言:javascript
复制
services.AddRouting(option =>
            {
                option.LowercaseUrls = true;
            });

但是得到以下错误:

InvalidOperationException:无法将约束引用'slugify‘解析为类型。使用'Microsoft.AspNetCore.Routing.RouteOptions.ConstraintMap'.注册约束类型

'{controller:slugify}/{action:slugify}/{id?}'.:创建名为“RouteCreationException”和模板RouteCreationException的路由时发生了错误

也许我错过了更多的东西!任何帮助都行!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-22 04:35:51

正如ASP.NET核心文档所说,我必须使用ConstraintMap配置Parameter transformer。因此,我做了如下工作,它是有效的:

ConfigureServices方法中的路由配置应该如下:

代码语言:javascript
复制
services.AddRouting(option =>
            {
                option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer);
                option.LowercaseUrls = true;
            });

然后,SlugifyParameterTransformer如下所示:

代码语言:javascript
复制
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();
        }
    }

谢谢。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52922418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档