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

时间:2015-02-22 19:37:43

标签: c# asp.net webforms

道歉,如果这看起来很模糊,试图自己理解。我要做的是使用实现IHttpHandler的类上传图像。

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

下面的代码允许我上传图片并且完美无缺:

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/");
             }
    }

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

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 + "/");
    }
}

后者的逻辑会有很大不同,所以理想情况下我想要一个单独的课程。

重新迭代如果我使用第二个代码块上传图像,它会使用第一个代码块来处理上传。

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

此致

1 个答案:

答案 0 :(得分:2)

在评论中提到这听起来像路由问题。

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

ashx route example

,将为〜/ LogoHanlderEndpoint.ashx中的LogHandler类提供和终点。

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

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

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