如何设置自定义路由以忽略ID之后的所有内容?
Autoroute似乎是在创建别名并将其保存到数据库时设置别名,因此它不会忽略任何内容,它必须完全匹配。 IRouteProvider似乎是模块控制器,我想使用默认的内容控制器。
所以基本上,我想创建像
这样的动作网址test/{Content.Id}/{Content.Slug}
我想在id上匹配,所以
test/{Content.Id}
并且同时忽略id之后的任何内容,这可能与原始的slug不匹配,所以
test/{Content.Id}/what/ever/garbage/gets/passed
例如,请查看SO如何管理此网址: https://stackoverflow.com/questions/22560272/aldjg%20jadf%20jg/adjf%20gadf%20g
同样,我想使用默认的Orchard Content Type控制器(至少尽可能长)。
答案 0 :(得分:1)
您可能必须使用IRouteConstraint
如果通过"内容类型控制器",则表示:部件驱动程序。是完全一样的。
您可以执行任何操作来验证URL,然后调用_contentManager.BuildDisplay(contentItem);
答案 1 :(得分:0)
我通过在我的模块/ w中添加一个Routes类来解决这个问题:
public class Routes : IRouteProvider
{
public void GetRoutes(ICollection<RouteDescriptor> routes)
{
var routeDescriptors = GetRoutes();
foreach (var descriptor in routeDescriptors)
routes.Add(descriptor);
}
public IEnumerable<RouteDescriptor> GetRoutes()
{
return new[] {
new RouteDescriptor {
Name= "PostIdRoute",
Route = new Route(
"post/{id}/{*SeoFluff}",
new RouteValueDictionary{
{"area", "Contents"},
{"controller", "Item"},
{"action", "Display"}
},
new RouteValueDictionary(),
new RouteValueDictionary { {"area", "Contents"} },
new MvcRouteHandler()
)
}
};
}
}
注意&#34; {* SeoFluff}&#34;部分。该通配符是处理未知数量的斜杠的关键,如果你不包含它,你需要添加多个RouteDescriptors。