asp.net – 用破折号路由值
发布时间:2020-12-16 09:52:32 所属栏目:asp.Net 来源:网络整理
导读:我有这条路线: routes.MapRoute( "News","News/{id}-{alias}",new { controller = "News",action = "Show" },new { id = @"^[0-9]+$" },namespaces: new[] { "Site.Controllers" } ); 这条路线适用于网址: http://localhost:54010/News/6-news 但不适用于
我有这条路线:
routes.MapRoute( "News","News/{id}-{alias}",new { controller = "News",action = "Show" },new { id = @"^[0-9]+$" },namespaces: new[] { "Site.Controllers" } ); 这条路线适用于网址: http://localhost:54010/News/6-news 但不适用于这样的url: http://localhost:54010/News/6-nice-news 如何在我的路线值中使用破折号“别名”? EDITED 像这样的路线: "News/{id}_{alias}" 适用于两个网址: http://localhost:54010/News/6_news http://localhost:54010/News/6_nice-news 解决方法
问题在于你的模式:News / {id} – {alias}因为路由正在贪婪地解析模式.
所以url http:// localhost:54010 / News / 6-news生成以下标记: id = 6,alias = news 但http:// localhost:54010 / News / 6-nice-news会生成以下标记: id = 6-nice,alias = news 并且id = 6-nice令牌将失败你的路由约束@“^ [0-9] $”.所以你会得到404. 现在有办法配置MVC的这种行为,所以你有以下选择: >使用除破折号以外的其他东西.正如您所说,结合破折号和连字符的工作原理. 我将向您展示一个原始的(没有任何错误处理或良好的编码实践!)选项3的实现,以帮助您入门. 所以你需要从Route继承: public class MyRoute : Route { public MyRoute(string url,RouteValueDictionary defaults,RouteValueDictionary constraints,RouteValueDictionary dataTokens) : base(url,defaults,constraints,dataTokens,new MvcRouteHandler()) { } protected override bool ProcessConstraint(HttpContextBase httpContext,object constraint,string parameterName,RouteValueDictionary values,RouteDirection routeDirection) { var parts = ((string) values["id"]).Split('-'); if (parts.Length > 1) { values["id"] = parts[0]; values["alias"] = // build up the alias part string.Join("-",parts.Skip(1)) + "-" + values["alias"]; } var processConstraint = base.ProcessConstraint(httpContext,constraint,parameterName,values,routeDirection); return processConstraint; } } 然后你只需要注册你的路线: routes.Add("News",new MyRoute("News/{id}-{alias}",new RouteValueDictionary(new {controller = "News",action = "Show"}),new RouteValueDictionary(new { id = @"^[0-9]+$" }),new RouteValueDictionary())); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 自上一步以来,进程或线程已更改
- asp.net-mvc – 如何将数据从AuthorizeAttribute传递给Cont
- asp.net-mvc – 错误处理在asp.net mvc 3
- asp.net – jQuery AJAX在Firefox中速度慢,在IE中速度很快
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之文章
- 使用Ajax更新ASP.Net MVC项目中的报表对象方法
- asp.net-mvc-3 – 将值传递给控制器??时,ASP.NET MVC datet
- asp.net-mvc – 在ASP MVC 2中向控制器发送参数
- asp.net – 一个cookie文件的最大大小是多少?
- asp.net-mvc – 更新数据库条目MVC实体框架
推荐文章
站长推荐
- asp.net-mvc – 我在哪里设置MVC.NET的Authorize
- asp.net – 跟踪像素或javascript包括?
- asp.net-mvc – ASP.Net MVC路由到用户名
- asp.net – Azure WebJob超时配置设置
- Windbg程序调试系列4-Live Debugging
- asp.net – 对于在Azure部署的Web.config中存储密
- asp.net-mvc-5 – 依赖注入结构图ASP.NET Identi
- asp.net-mvc – VB.NET中的ASP.NET MVC 4 HtmlHe
- azure – 升级到ASP.NET 5 beta5后如何进一步调试
- asp.net-mvc – MVC中TextBoxFor的DisplayFormat
热点阅读