httphandler不参与非主页

时间:2010-03-02 04:22:30

标签: asp.net asp.net-mvc httphandler

我有一个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应用程序可以在相同的设置下正常工作。

希望我提供了所有我知道的东西。当然,如果事情不明确,我会很乐意尽可能多地解释一下!

2 个答案:

答案 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

找到更多关于帖子的信息