ASP.NET路由约束:排除图片后缀路径调用控制器方法的正则问题
修正方案
问题原因
- 你当前的正则是正向匹配图片后缀路径,只有路径带图片后缀时才会触发该路由,和需求完全相反
- 正则本身存在语法错误,末尾的
(/.)?)写法有误,无法匹配正常路径结构
调整后的路由配置
routes.MapRoute( name: "DefaultCMS", url: "{*paths}", defaults: new { controller = "Home", action = "Index", paths = UrlParameter.Optional }, constraints: new { paths = @"^((?!\.(jpeg|gif|jpg|png)$).)*$" } );
正则说明
- 用了负向零宽断言
(?!pattern),表示匹配不满足后面规则的内容 - 整个正则的含义是:匹配从开头到结尾,末尾没有出现
.jpeg/.gif/.jpg/.png后缀的所有路径,只有满足这个条件时路由才会生效
额外注意
- 这个通用路由要放在所有自定义路由规则的最下方,避免拦截你需要单独生效的其他路由
- IIS默认会优先处理静态文件,图片资源默认不会走到路由规则中,如果仍然出现图片被拦截的情况,可以检查web.config中静态资源处理的相关配置是否被修改
内容的提问来源于stack exchange,提问作者Kd Nimavat
相关产品推荐
相关产品推荐

