ASP.NET Core2.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'.注册约束类型
和
'{controller:slugify}/{action:slugify}/{id?}'.:创建名为“RouteCreationException”和模板RouteCreationException的路由时发生了错误
也许我错过了更多的东西!任何帮助都行!
发布于 2018-10-22 04:35:51
正如ASP.NET核心文档所说,我必须使用ConstraintMap配置Parameter transformer。因此,我做了如下工作,它是有效的:
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();
}
}谢谢。
https://stackoverflow.com/questions/52922418
复制相似问题