我有一个简单的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区域。任何人都可以帮忙吗?
答案 0 :(得分:0)
你为什么不使用routes.MapPageRoute
所以可能你可以做到
routes.MapPageRoute(
"CategoryImageUploaded",
"Admin/CategoryImageUploadHandler.ashx",
"~/Admin/CategoryImageUploadHandler.ashx")
//please verify you path to .ashx before trying