使用CrystalImageHandler.aspx的图表和图片时,我遇到了Crystal Reports的问题。图像无法显示,我怀疑这是由于MVC路由问题。
路径图像路径与此类似:
SRC = “/ CrystalImageHandler.aspx?动态图片= cr_tmp_image_a8301f51-26de-4869-be9f-c3c9ad9cc85e.png”
使用与此类似的网址:
本地主机:01234 / ViewCrystalReports.aspx ID = 50
无法找到图像,因为它正在寻找一个不存在的目录。如何更改CrystalImageHandler.aspx所在的路径?我想如果我从根本引用问题就会解决,但是我在Web.Config中改变的任何东西都无法工作。
我应该提到这是在传统的aspx页面上,而不是视图等
答案 0 :(得分:6)
我在编辑Web.Config
文件
插入以下行:
<system.web>
...
<httpHandlers>
<add path="CrystalImageHandler.aspx" verb="GET" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"></add>
</httpHandlers>
...
*注意写下你的号码版本(Version = xx.x.xxxx.x)
答案 1 :(得分:2)
想出来。路由正在干扰正在生成的CrystalImageHandler.aspx链接。 Global.aspx有以下行告诉路由引擎忽略资源文件:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
但这不是传统的资源文件,出于某种原因它是一个aspx文件(任何人都知道为什么?)
添加此修复它:
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
答案 2 :(得分:2)
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);
}
}
此控制器将调用处理程序。只需添加一个到CrystalImageHandler.aspx的路径,它也可以用于您想要的任何子路径(在本例中为/ reports)。我无法通过配置让处理程序完成的事情。
答案 3 :(得分:0)
<httpHandlers>
<add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web,Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" />
</httpHandlers>
...............................
<appSettings>
<add key="CrystalImageCleaner-AutoStart" value="true" />
<add key="CrystalImageCleaner-Sleep" value="60000" />
<add key="CrystalImageCleaner-Age" value="120000" />
</appSettings>
<system.webServer>
<handlers>
<add name="CrystalImageHandler.aspx_GET" verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" preCondition="integratedMode"/>
</handlers>
</system.webServer>
:)我将在web config中添加
来解决这个问题答案 4 :(得分:0)
这是因为路由干扰了CrystalImageHandler.aspx。因此,无论是在Global.asax还是routeConfig文件中,我们都可以忽略.aspx扩展文件的路由。您可以通过添加以下行来忽略.aspx扩展路由。
routes.IgnoreRoute(“{ allaspx}”,new {allaspx = @“。 .aspx(/.*)?"});