在如下代码的写法中:

public class RouteConfig{public static void RegisterRoutes(RouteCollection routes){routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
       routes.MapPageRoute("Report", "report", "~/Content/page/report.aspx")
       routes.MapRoute( name: "BaseManage", url: "Admin/BaseManage/{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );        routes.MapRoute( name: "Order", url: "Admin/OrderManage/{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );        routes.MapRoute( name: "Admin", url: "Admin/{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );        routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );      }   }

因为系统需要,方法RegisterRoutes中同时应用了MapPageRoute和MapRoute方法,这样写的后果就是所有的页面加载时都跳转到了WEBFORM页面中,导致系统报错。

报错原因是两种不同的方式之间有冲突,解决这个问题,需要给MapPageRoute加个约束,这时就用到了IRouteConstraint接口,看如下代码:

public class MyCustomConstraint : IRouteConstraint{public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection){return routeDirection == RouteDirection.IncomingRequest;}}

然后按如下修改语句即可

//routes.MapPageRoute("Report", "report", "~/Content/page/report.aspx");
routes.MapPageRoute("Report", "report", "~/Content/page/report.aspx", true, null, new RouteValueDictionary { { "outgoing", new MyCustomConstraint() } });

转载于:https://www.cnblogs.com/yuanfg/p/9015762.html

ASP.NET MVC中的路由IRouteConstraint方法应用实例相关推荐

  1. ASP.NET MVC教程五:ASP.NET MVC中的路由

    一.概述 在ASP.NET MVC架构中,控制器在3大核心构件中处于中心地位,通过控制器支配模型和视图,然而从浏览器发出的请求到控制器还需要路由的协助,路由将特定的请求和控制器的动作对应起来. 在AS ...

  2. ASP.NET MVC 中的路由传递参数

    路由传递参数 ASP.NET MVC 根据传入URL调用不同的控制器类()以及他们中不同的操作方法 //在HellowordController中的代码 using System; using Sys ...

  3. ASP.NET MVC中实现多个按钮提交的几种方法

    有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...

  4. ASP.NET MVC中的模型装配 封装方法 非常好用

    下面说一下 我们知道在asp.net mvc中 视图可以绑定一个实体模型 然后我们三层架构中也有一个model模型 但是这两个很多时候却是不一样的对象来的 就拿微软的官方mvc例子来说明 微软的视图实 ...

  5. ASP.NET MVC中你必须知道的13个扩展点

         ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我 ...

  6. ASP.NET MVC学习之路由篇(2)

    ASP.NET MVC学习之路由篇(2) 原文:ASP.NET MVC学习之路由篇(2) 继ASP.NET MVC学习之路由篇(1)后继续学习. 7.解决与物理路径的冲突 当发送一个请求至ASP.NE ...

  7. 如何在 ASP.NET MVC 中集成 AngularJS(3)

    今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...

  8. 如何在 ASP.NET MVC 中集成 AngularJS(2)

    在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...

  9. 如何在 ASP.NET MVC 中集成 AngularJS

    介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...

最新文章

  1. 面试 -- ListView对其指定的子Item进行单独的刷新
  2. 移动App开发趋势及未来的展望
  3. 阿里云实时计算的前世“功”今生“能”
  4. 使用OpenGL Shader实现放大镜效果
  5. 七、Mosquito 集群搭建
  6. 项目中遇到不善于表达的人,该如何沟通?
  7. VMware Converter 使用图解
  8. 微信小程序运行报错---invoke event
  9. 怎么在Windows 11中为音频输出选择扬声器
  10. 【PHP】网站防止QQ拦截防红跳转代码
  11. 财务管理属于计算机网络,浅谈如何应用计算机网络进行财务管理
  12. linux解压覆盖命令
  13. linux文件未识别,linux的内核文件vmlinuz介绍-深入理解Linux重定向的使用-网卡eth0,未识别的端口的解决方法_169IT.COM...
  14. “我花了 5 年时间编写自己的操作系统!”
  15. 阿里巴巴最新开源项目 - [HandyJSON] 在Swift中优雅地处理JSON
  16. tensorflow 函数查找
  17. 电脑管家怎么整理桌面图标?
  18. Druid 在有赞的实践
  19. ModelSim入门教程和两个典型例子
  20. 如何查看网站服务器的速度,如何测试网站服务器访问速度?

热门文章

  1. win10怎么更改账户名称_Win10邮件功能如何查看邮件
  2. JavaScript高级之ECMASript 7、8 、9 、10 新特性
  3. JavaScript高级之构造函数和原型
  4. LeetCode 1826. 有缺陷的传感器(枚举)
  5. LeetCode 464. 我能赢吗(状态压缩+记忆化递归 / 博弈)
  6. LeetCode 244. 最短单词距离 II(哈希map+set二分查找)
  7. LeetCode 157. 用 Read4 读取 N 个字符
  8. c2010页面闪现_vue使用v-if v-show页面闪烁,div闪现的解决方法
  9. vue 高德地图 不同区域显示不同颜色_高德百度哪家强?苹果Carplay第三方分屏功能评测...
  10. 用递归计算一个数字每一位相加的结果。_leetcode 2 两数相加(c++)