asp.net - MVC 升级后如何修复 Chartimg.axd

标签 asp.net mschart

最近我将 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/

相关文章:

.net-4.0 - 如何在添加点之前显示 DataVisualization.Charting 图表?

.net - 将 ObjectContext 存储在 ASP.NET 中的线程静态变量中是否安全?

asp.net - 更改页面名称或重写 URL?

c# - C# 中的 MS Chart 中的#VALX 值不是 "M/d H:mm"格式

asp.net - System.Web.UI.DataVisualization.Charting.Grid 在 GAC 中存在两次

asp.net - 从 javascript 触发 ASP.NET 事件

javascript - 如何在 Javascript 中切换(隐藏/显示)<a> 标签的表格 onClick

c# - 如何自动重新引发异常

c# - MS-Chart 在 C# 中使用滚动条缩放 x 轴