0

管理エリアのあるシンプルな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 領域から参照する方法が必要です。誰でもこれを手伝ってもらえますか?

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 に答える