0

我有一个带有管理区域的简单 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; }
    }
}

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

 <system.webserver>
       <add name="CategoryImageUploadHandler path="Admin/CategoryImageUploadHandler.ashx" verb="*" type="Hitaishi.Web.Handlers.CategoryImageUploadHandler, Hitaishi.Web"/>

 <system.web>
      <httpHandlers>
           <add path="Admin/CategoryImageUploadHandler.ashx" verb="*" type="Hitaishi.Web.Handlers.CategoryImageUploadHandler, Hitaishi.Web"/>

  Routeconfig.cs:
        routes.IgnoreRoute("{*allashx}", new { allashx = @".*\.ashx(/.*)?" });

但是,当 plupload 从 Admin 区域向 http 处理程序发送 POST 时,调用仍然会被路由拾取,因为它会尝试查找

/Admin/CategoryImageUploadHandler.ashx

我尝试使用斜线来检查我给出的路径是否错误或更改注册中的路径,但似乎没有任何效果。我仍然收到 404 错误。

简而言之,我需要一种从网站的另一个 mvc 区域引用网站主 MVC 区域中定义的 HttpHandler 的方法。有人能帮忙吗?

4

1 回答 1

0

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

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

    //please verify you path to .ashx before trying
于 2013-06-15T18:16:31.990 回答