实现 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 扩展名。
如果这看起来很含糊,我深表歉意,我自己也在努力理解。我想要做的是使用实现 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 扩展名。