我有一个MVC2应用程序和HttpHandler库。为简化起见,图书馆提供图像。问题是,如果我从根页面(http://whatever/)调用此处理程序,一切正常。但是,如果我更改Global.asax,那么同一页面现在的地址为http://whatever/controller/action - 它不起作用(ALT文本而不是图像)。
我没有编写处理程序库,但我有代码;所以我在IHttpHandler实现的ProcessRequest函数中放了一个断点。对于良好的情况,断点会被触发,但对于坏情况则不会。所以,我假设没有为非根页面调用处理程序。
这就是我在system.webServer / handlers部分中所拥有的:
<add name="ImageHandler" verb="*"
path="ImageLib.axd" type="ImageHandler, ImageHandler" />
视图页面有
<img src="ImageLib.axd?image=img001.jpg" alt="real image here" />
我不知道MVC是否在其中扮演任何角色......旧的WebForms应用程序可以在相同的设置下正常工作。
希望我提供了所有我知道的东西。当然,如果事情不明确,我会很乐意尽可能多地解释一下!
答案 0 :(得分:1)
试试这个:
<img src="/ImageLib.axd?image=img001.jpg" alt="real image here" />
根本问题是您是相对引用ImageLib.axd。浏览器会尝试从任何地方访问它......在您的情况下,当它请求图像时,它会从http://whatever/controller/action/ImageLib.axd请求它。我假设你需要它来http://whatever/ImageLib.axd请求。
请注意,简单地添加前面的whack(/)并不一定能解决您的问题。如果ImageLib.axd位于根目录下的某个子文件夹中,则必须包含该文件夹。如果您的ImageLib.axd处理程序位于名为handlers off的网站根目录下,则执行以下操作:
<img src="/Handlers/ImageLib.axd?image=img001.jpg" alt="real image here" />
答案 1 :(得分:1)
您需要将图像请求路由到httpHandler,但mvc正在拦截请求并尝试路由到控制器操作。
您可以在Global.asax中配置它,或者如果您在OnStart()方法上实现自己的HttpApplication,如下所示:
routes.IgnoreRoute("{*allaxd}", new {allaxd=@".*\.axd(/.*)?"});
// or make sure you have this
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
你可以在Phil Haack的http://haacked.com/archive/2008/07/14/make-routing-ignore-requests-for-a-file-extension.aspx
找到更多关于帖子的信息