Как исправить chartimg.axd после обновления MVC

Недавно я обновил проект ASP.NET WebForms до гибридного MVC.

Однако это нарушило наш элемент управления диаграммой ASP.NET - изображения больше не отображались в отчетах.

Обновление с 3.5 до 4.0 элемента управления диаграммой также могло быть проблемой. Я заменил ссылки из локально скопированных сборок 3.5 на версию 4.0 GAC сборки System.Web.UI.DataVisualization.Charting.


person fiat    schedule 08.02.2014    source источник


Ответы (1)


Чтобы это снова заработало, нужно было несколько шагов.

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 на первом шаге может быть удалена.

person fiat    schedule 08.02.2014