实现 IHttpHandler 的多个 类(图片上传器)

Multiple Classes that implements IHttpHandler (Image uploaders)

如果这看起来很含糊,我深表歉意,我自己也在努力理解。我想要做的是使用实现 IHttpHandler 的 class 上传图像。

一个 class 一切正常,但如果我添加另一个 class 实现相同的界面来上传图像,它会恢复到另一个。这很难解释,所以我会添加一些代码:

下面的代码允许我上传图片并且效果很好:

public class UploadifyHandler : IHttpHandler
{

            public void ProcessRequest(HttpContext context)
            {      
                context.Response.ContentType = "text/plain";
                HttpPostedFile postedFile = context.Request.Files["Filedata"];
                Single maxWidthPx = 75;
                string filename = postedFile.FileName;
                var Extension = filename.Substring(filename.LastIndexOf('.') + 1).ToLower();
                string savepath = HttpContext.Current.Server.MapPath("/images/profile/");
             }
    }

上面的代码工作完美,但现在如果我添加另一个实现相同接口的 class 它仍然可以工作,但它使用 none 的逻辑并恢复到上面的代码块:

public class LogoHandler : IHttpHandler
{

   public void ProcessRequest(HttpContext context)
   {
                context.Response.ContentType = "text/plain";
                HttpPostedFile postedFile = context.Request.Files["Filedata"];
                Single maxWidthPx = 150;
                string filename = postedFile.FileName;
                var Extension = filename.Substring(filename.LastIndexOf('.') + 1).ToLower();

                System.IO.Directory.CreateDirectory("/images/campaign/" + user.campaignName + "/");

                string savepath = HttpContext.Current.Server.MapPath("/images/campaign/" + user.campaignName + "/");
    }
}

后者的逻辑将大不相同,因此理想情况下我希望有一个单独的 class。

只是重复如果我使用第二个代码块上传图像,它使用第一个代码块来处理上传。

我可能遗漏了一些非常简单的东西,因此需要一双新的眼睛。任何帮助将不胜感激。

此致,

正如评论中提到的,这听起来像是路由问题。

使用 IHttpHandler 接口实现的通用处理程序可以使用 .ashx 文件来定义它们的端点,也可以在 web.config 文件中定义。对于 ashx 文件,文件名成为地址,IHttpHandler 实现由 WebHandler Class 声明指定。例如:

,将在 ~/LogoHanlderEndpoint.ashx.

为您的 LogHandler class 提供端点

要在 web.config 文件中设置相同的内容,请将一个元素添加到系统网络服务器配置中的处理程序部分:

<system.webServer>
    <handlers>
        <add name="LogoHandler" path="LogoHandlerEndpoint.ashx" verb="*" type="LogoHandler" />
    </handlers>
</system.webServer>

这里的type属性定义了实现IHttpHandler的class。使用此方法,路径可以是任何内容,不需要 .ashx 扩展名。