管理エリアのあるシンプルなasp.net mvc 4 Webサイトがあります。管理領域で実行される plupload スクリプトからのアップロードを処理するカスタム http ハンドラーを定義しました。ハンドラーのコードは次のとおりです。
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 エラーが発生します。
簡単に言えば、Web サイトのメイン MVC 領域で定義された HttpHandler を Web サイトの別の MVC 領域から参照する方法が必要です。誰でもこれを手伝ってもらえますか?