13

我不知道在 MVC 网站上发生这种情况是否相关,但我想我还是会提到它。

在我的 web.config 我有这些行:

<add verb="*" path="*.imu" type="Website.Handlers.ImageHandler, Website, Version=1.0.0.0, Culture=neutral" />

在网站项目中,我有一个名为 Handlers 的文件夹,其中包含我的 ImageHandler 类。它看起来像这样(我已经删除了 processrequest 代码)

using System;
using System.Globalization;
using System.IO;
using System.Web;

namespace Website.Handlers
{
    public class ImageHandler : IHttpHandler
    {
        public virtual void ProcessRequest(HttpContext context)
        {
            //the code here never gets fired
        }

        public virtual bool IsReusable
        {
            get { return true; }
        }
    }
}

如果我运行我的网站并转到 /something.imu,它只会返回 404 错误。

我正在使用 Visual Studio 2008 并尝试在 ASP.Net 开发服务器上运行它。

我一直在寻找几个小时,并让它在一个单独的空网站上工作。所以我不明白为什么它不能在现有网站中工作。顺便说一句,没有其他对 *.imu 路径的引用。

4

1 回答 1

35

我怀疑这与您使用 MVC 的事实有关,因为基本上它控制了所有传入的请求。

我怀疑您将不得不使用路由表,并可能创建一个新的路由处理程序。我自己没有这样做,但这样的事情可能会奏效:

void Application_Start(object sender, EventArgs e) 
{
    RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
    routes.Add(new Route
    (
         "{action}.imu"
         , new ImageRouteHandler()
    ));
}

然后ImageRouteHandler该类将返回您的自定义ImageHttpHandler,尽管通过查看网络上的示例可能会更好地更改它以便实现MvcHandler,而不是直接IHttpHandler

编辑1:根据彼得的评论,您也可以使用以下IgnoreRoute方法忽略扩展名:

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute("{resource}.imu/{*pathInfo}");
}
于 2009-05-14T14:15:19.560 回答