最近把博客的前台改到了MVC3上去,后台还是WebForm做的。一直有个小bug,今天才刚刚解决。后台页面里有个地方用了ASP.NET 4自带的那个Chart图表控件。原来没用MVC的时候是可以显示的。换了MVC之后,WebForm的代码没有改过,其他都好用,就这个Chart爆了。具体表现为,网页没有报错,就Chart的部分显示不出来。今天检查了一下,并最终解决了这个问题。
首先我在firebug里发现,Chart控件生成的图片是来自一个handler的,但加载失败了:
根据最近玩MVC被坑的经验,可能是URL路由引起的。我去后台日志查看了一下,果然是这样的:
解决办法很简单,在Global.asax里写一条忽略URL路由的规则:
routes.IgnoreRoute("Console/Dashboard/ChartImg.axd");
但我很奇怪,MVC3默认已经在Global.asax里加入了忽略所有axd的过滤,为毛这个axd不认呢?
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
据我观察,ASP.NET似乎会把网站目录下每一个单独的文件夹,都当成一个小的站点来处理,能够在子目录里加web.config似乎就是这个道理。所以axd大概也需要重新指定一下吧~
这只是我个人的理解,如有错误,还请ASP.NET帝们指教。
最近我在研究 Nancy 这个框架,有空可以看看。
{resource}只能匹配URL片段,不包含“/”。所以默认规则只忽略在顶级目录的axd文件。
参见我的网站 https://gqqnbig.me/2018/01/24/asp-net-mvc%E8%B7%AF%E7%94%B1-%E6%B2%A1%E4%BA%BA%E5%91%8A%E8%AF%89%E4%BD%A0%E7%9A%84%E4%BA%8B/
和 https://stackoverflow.com/a/3228545