我在MVC应用程序内部的Webform中使用Crystal Reports。但是,在ASP.NET Development Server和IIS 7(在Win7x64上)上未显示报告中的图像。
我从其他类似的问题中了解到,CrystalImageHandler HTTP处理程序负责渲染图像,但我尝试了所有常用的解决方案都无济于事。
到目前为止,我有
在我的appSettings
(通过http://www.mail-archive.com/bdotnet@groups.msn.com/msg26882.html)
<add key="CrystalImageCleaner-AutoStart" value="true" />
<add key="CrystalImageCleaner-Sleep" value="60000" />
<add key="CrystalImageCleaner-Age" value="120000" />
将以下httpHandler添加到system.web/httpHandlers
(通过https://stackoverflow.com/questions/2253682/crystal-report-viewer-control-isnt-loading-the-images-inside-the-report)
<add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
在我的Global.asax.cs中添加了以下内容(通过Crystal Reports Images and ASP.Net MVC)
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
和
routes.IgnoreRoute("CrystalImageHandler.aspx");
关于为什么图像仍然是404的任何想法?
答案 0 :(得分:8)
我有类似的问题。这帮助了我。
routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*(CrystalImageHandler).*" });
答案 1 :(得分:1)
我已经尝试了多种可以使用的方法。没有。所以我最终决定作弊:
public class CrystalImageHandlerController : Controller
{
//
// GET: /Reports/CrystalImageHandler.aspx
public ActionResult Index()
{
return Content("");
}
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
var handler = new CrystalDecisions.Web.CrystalImageHandler();
var app = (HttpApplication)filterContext.RequestContext.HttpContext.GetService(typeof(HttpApplication));
if (app == null) return;
handler.ProcessRequest(app.Context);
}
}
我添加了一个路径到这个控制器匹配Crystal期望(./CrystalImageHandler.aspx)并使用该控制器在执行操作时调用处理程序。不漂亮,但功能齐全。
答案 2 :(得分:0)
您是否尝试将其添加到system.webServer/handlers
?这应该在IIS7上修复它,但奇怪的是它不能在开发服务器上运行。
答案 3 :(得分:0)
在RouteConfig.cs文件中添加
routes.IgnoreRoute( “报告/ {资源}的.aspx / {*} PATHINFO”);
请注意 “Reports”是包含报表查看器的aspx文件的文件夹名称 根据您的应用程序更改此文件夹名称