最近我将 ASP.NET WebForms 项目升级为 MVC 混合项目。
然而,它破坏了我们的 ASP.NET 图表控件 - 图像不再在报告中呈现。
图表控件从 3.5 升级到 4.0 也可能是问题。我将本地复制的 3.5 程序集的引用替换为 System.Web.UI.DataVisualization.Charting 程序集的 4.0 GAC 版本。
最佳答案
要使其再次正常工作需要采取几个步骤
1)以下是 web.config 的相关片段
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting" assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</controls>
</pages>
<compilation defaultLanguage="c#" targetFramework="4.5">
<assemblies>
<add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
</system.web>
<system.webServer>
<handlers>
<remove name="ChartImageHandler" />
<add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.DataVisualization" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
2)
我需要忽略 axd 的路线。请求图表图像的 URL 格式为 http://sitename/reports/chartimg.axd?i=chart444334&i=0
所以我必须小心地将/reports/url 包含在路由中
routes.IgnoreRoute("Reports/{resource}.axd/{*pathInfo}");
请注意,这需要放置在路线的顶部。当放置在路由配置的底部时它不起作用。 MVC 路由方面的专家可能是 LDO,但这对我来说并不明显。
3) 此时,图表已生成,但在尝试提供图表图像时,我仍然收到404 image not found。这意味着我的 web.config 可能仍然存在问题。
我放弃尝试使用 HTTP 处理程序并切换到基于文件的位置。这适用于图表控件本身:
ImageStorageMode = ImageStorageMode.UseImageLocation;
如果您不希望好奇的用户枚举图表,因为编号是可预测的,那么这并不理想,幸运的是我的图表不够敏感,不足以引起关注。
这也意味着第一步中的一些 web.config 可以被删除。
关于asp.net - MVC 升级后如何修复 Chartimg.axd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21642335/