道歉,如果这看起来很模糊,试图自己理解。我要做的是使用实现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 + "/");
}
}
后者的逻辑会有很大不同,所以理想情况下我想要一个单独的课程。
重新迭代如果我使用第二个代码块上传图像,它会使用第一个代码块来处理上传。
我可能会遗漏一些非常简单的东西,因此需要一双新鲜的眼睛。任何帮助将不胜感激。
此致
答案 0 :(得分:2)
在评论中提到这听起来像路由问题。
使用IHttpHandler接口实现的通用处理程序可以使用.ashx文件来定义其端点,也可以在web.config文件中定义。对于ashx文件,文件名成为地址,IHttpHandler实现由WebHandler类声明指定。例如:
,将为〜/ LogoHanlderEndpoint.ashx中的LogHandler类提供和终点。
要在web.config文件中设置相同的内容,请在系统Web服务器配置中向处理程序部分添加一个元素:
<system.webServer>
<handlers>
<add name="LogoHandler" path="LogoHandlerEndpoint.ashx" verb="*" type="LogoHandler" />
</handlers>
</system.webServer>
这里type属性定义了实现IHttpHandler的类。使用此方法,路径可以是任何内容,不需要.ashx扩展名。