如果您查看SO问题URL,您将看到ID和“SLUG”被传递给Questions控制器:
https://stackoverflow.com/questions/676934/what-do-you-need-to-write-your-own-blog-engine.我感到有趣的是您可以更改URL的“SLUG”部分,而不会影响应用程序的路由能力请求
example.我能想到的唯一方法就是接受一个id和一个“SLUG”的路由,并在slug上使用路由约束来确保它遵循一个模式.我不得不使用约束来确保这两个变量不会导致此路由匹配所有请求.有没有人有更好的方法来实现这一点,或任何更高级的路由方案的例子?
加成:
我意识到SLUG是为了人类的可读性,我想在另一个应用程序中复制此功能.实现这一目标的最佳方法是什么?
路线:
routes.MapRoute( "Id + Slug",// Route name "Test/{id}/{slug}",// URL with parameters new // Parameter defaults { controller = "Test",action = "Details",id = "",slug = "" },new { slug = new SlugConstraint() } );
简单约束:
public class SlugConstraint : IRouteConstraint { public bool Match(HttpContextBase httpContext,Route route,string parameterName,RouteValueDictionary values,RouteDirection routeDirection) { string value = values[parameterName].ToString(); return value.Contains("-"); } }
解决方法
是
this你正在寻找…它没有定义最后的slu ..