从一个区域调用HttpHandler

时间:2013-06-15 17:55:30

标签: asp.net-mvc asp.net-mvc-routing httphandler asp.net-mvc-areas

我有一个简单的asp.net mvc 4网站,带有管理区域。我已经定义了一个自定义的http处理程序来处理在管理区域中运行的plupload脚本的上传。以下是处理程序的代码:

public class CategoryImageUploadHandler : IHttpHandler, IRequiresSessionState {

    public void ProcessRequest(HttpContext context)
    {
        try
        {
            HttpPostedFile file = context.Request.Files[0];

            var categoryID = context.Request["categoryID"];
            var fileName = Path.GetFileName(file.FileName);
            var parentPath = HttpContext.Current.Server.MapPath("~/Files/Content");
            var targetDir =  Path.Combine(parentPath, categoryID);
            var targetFile = Path.Combine(targetDir, fileName);
            //check if Directory exists
            if (Directory.Exists(targetDir))
                file.SaveAs(targetFile);
            else
            {
                Directory.CreateDirectory(targetDir);
                file.SaveAs(targetFile);
            }
            context.Response.Write("/"+categoryID+"/"+fileName);
        }
        catch (Exception ex)
        {
            context.Response.Write("0");
            context.Response.Write(ex.Message);
        }
    }
    public bool IsReusable
    {
        get { return false; }
    }
}

public void ProcessRequest(HttpContext context) { try { HttpPostedFile file = context.Request.Files[0]; var categoryID = context.Request["categoryID"]; var fileName = Path.GetFileName(file.FileName); var parentPath = HttpContext.Current.Server.MapPath("~/Files/Content"); var targetDir = Path.Combine(parentPath, categoryID); var targetFile = Path.Combine(targetDir, fileName); //check if Directory exists if (Directory.Exists(targetDir)) file.SaveAs(targetFile); else { Directory.CreateDirectory(targetDir); file.SaveAs(targetFile); } context.Response.Write("/"+categoryID+"/"+fileName); } catch (Exception ex) { context.Response.Write("0"); context.Response.Write(ex.Message); } } public bool IsReusable { get { return false; } } }

这位于主站点的Handlers /目录中。这就是我注册处理程序的方式:

但是,当plupload从管理区域向http处理程序发送POST时,在尝试查找

/Admin/CategoryImageUploadHandler.ashx

时,路由仍会被路由选中。

我试过用斜杠来检查我给出的路径是错误的还是在注册中改变路径,但似乎没有任何效果。我仍然收到404错误。

简而言之,我需要一种方法来引用网站主要MVC区域中定义的HttpHandler,该网站的另一个mvc区域。任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

你为什么不使用routes.MapPageRoute 所以可能你可以做到

routes.MapPageRoute(
"CategoryImageUploaded", 
"Admin/CategoryImageUploadHandler.ashx", 
"~/Admin/CategoryImageUploadHandler.ashx")

    //please verify you path to .ashx before trying