我相信我遇到过我认为使用水晶报告最困难的任务。
问题
我正在尝试向我的报告中的图像显示,一个存储在数据库中的varbinary,第二个是从我的桌面添加的徽标。我遇到的问题是,CrystalImageHandler
未找到,没有我尝试过的作品。
并抛出以下错误
http://localhost:1979/ASP/CrystalImageHandler.aspx?dynamicimage=cr_tmp_image_9b453c74-dbe2-4f03-832e-b1bd43e6ec43.png 404 (Not Found)
http://localhost:1979/ASP/CrystalImageHandler.aspx?dynamicimage=cr_tmp_image_0bf1fda9-3e87-446d-94a4-aaad9aa7e53d.png 404 (Not Found)
我尝试了什么
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*(CrystalImageHandler).*" });
routes.IgnoreRoute("ASP/{resource}.aspx/{*pathInfo}");
routes.IgnoreRoute("ASP/{resource}.aspx/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
我还尝试将其添加到web.config文件中的handler标签中。 我试过添加
<httpHandlers>
<add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web,Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" />
</httpHandlers>
到主web.config然而,在启动我的应用程序时,我收到错误An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.
然后我说我可以忽略错误If you are certain that it is OK to ignore this error, it can be disabled by setting system.webServer/validation@validateIntegratedModeConfiguration to false.
但是将其设置为false不起作用。
如果我得到帮助或一些指导来解决这个问题,我将不胜感激。因为这么简单的事情看起来很奇怪,这似乎很奇怪。
答案 0 :(得分:3)
我遇到了类似的问题。我发现在Web.config中改变下面显示的代码中的路径是成功的。我用CrystalImageHandler *替换了CrystalImageHandler.aspx。这似乎解决了我的问题。我真的不明白为什么说实话。我找到了一个在线发帖的人,他建议他找不到CrsytalImageHandler.aspx页面并决定只指向CrystalImageHandler。我认为这对某些人来说可能值得一试。
我使用的是VS2015,.Net 4.5,C#
<httpHandlers>
<add verb="GET" path="CrystalImageHandler*" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
</httpHandlers>
<handlers>
<add name="CrystalImageHandler.aspx_GET" verb="GET" path="CrystalImageHandler*" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" preCondition="integratedMode"/>
</handlers>
希望这有帮助,
标记
答案 1 :(得分:1)
我也遇到过关于在mvc中加载水晶报表上的图像的问题,但是能够通过以下步骤来解决这个问题。
可能的解决方案:
首先要检查的是Crystal Reports图像处理程序是否已包含在内。默认情况下,此处理程序配置似乎不会添加到web.config中,因此请将其打开并将其打开。查看<httpHandlers>
元素。你需要以下内容:
<add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
另外,检查<handlers>
父节点中的<system.webServer>
元素,因为处理程序也需要添加到那里:
<add name="CrystalImageHandler.aspx_GET" verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" preCondition="integratedMode"/>
ASP.NET MVC中的问题
如果在ASP.NET MVC中使用Crystal Reports,则图像可能仍无法加载。这是因为ASP.NET MVC路由引擎正在尝试将Image Handler的资源请求映射到控制器动作&amp;因为它不能返回404状态。
要解决此问题,请告诉ASP.NET MVC路由引擎忽略对此资源的请求。为此,请打开路由配置代码(RouteConfig.cs
)。
.axd
资源应该已经被忽略了。添加以下忽略规则:
routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*(CrystalImageHandler).*" });
答案 2 :(得分:0)
在web.config中添加必要的更改后。如果仍然无法正常工作,那么您可以尝试一下 对于ASP.NET MVC项目 在路由配置中 添加追随线
<?php echo mt_rand(); ?>
您可能需要根据aspx页面位置更改路径
答案 3 :(得分:0)
添加到RegisterRoutes
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
然后在Web.config中修复CrystalImageHandler
全部替换
path="CrystalImageHandler.aspx"
与
path="CrystalImageHandler*"