0

その場で機能する画像サイズ変更機能があります。実際の画像がサーバーで利用可能で、そのさまざまなサイズ (中、小) が存在しないとします。Application_error がキャプチャされ、ErrorController にリダイレクトされます。そこでサイズ変更が行われ、新しく作成された画像ファイルが 404 ではなくステータス 200 で返されます。

これは Visual Studio 2012 では問題なく動作しますが、IIS 7.5 に展開すると動作しなくなります。ここに Application_Error および ErrorController コードを配置しています

    protected void Application_Error(object sender, EventArgs e)
    {            
        var app = (MvcApplication)sender;
        var context = app.Context;
        var filePath = ((System.Web.HttpApplication)(app)).Request.FilePath;
        var ex = app.Server.GetLastError();
        context.Response.Clear();
        context.ClearError();
        var httpException = ex as HttpException;

        var routeData = new RouteData();
        routeData.Values["controller"] = "errors";
        routeData.Values["exception"] = ex;
        routeData.Values["action"] = "http500";
        routeData.Values["id"] = filePath;

        if (httpException != null)
        {
            switch (httpException.GetHttpCode())
            {
                case 404:
                    routeData.Values["action"] = "http404";
                    break;
                case 403:
                    routeData.Values["action"] = "http403";
                    break;
                case 500:
                    routeData.Values["action"] = "http500";
                    break;
            }
        }
        IController controller = new  JewelryPotSite.Controllers.ErrorController();
        controller.Execute(new RequestContext(new HttpContextWrapper(context), routeData));
    }

エラーコントローラコードは

public ActionResult Http404(文字列 ID)

    {
        bool flag = false;
        if (id.ToLower().Contains("/thumbnail/"))
        {
            flag = true;
            string actualFilePath = id.ToLower().Replace("/thumbnail", "");
            string test = Server.MapPath(actualFilePath);
            if (System.IO.File.Exists(Server.MapPath(actualFilePath)))
            {
                if (!System.IO.File.Exists(Server.MapPath(id)))
                {
                    Bitmap mg = new Bitmap(Server.MapPath(actualFilePath));
                    ResizeImage(mg, id, new Size(56, 56));
                    Response.StatusCode = 200;
                }
            }
            else 
            {
                Response.StatusCode = 404;
                return Content("404", "text/plain");
            }
        }
        if (id.ToLower().Contains("/medium/"))
        {
            flag = true;
            string actualFilePath = id.ToLower().Replace("/medium", "");
            string test = Server.MapPath(actualFilePath);
            if (System.IO.File.Exists(Server.MapPath(actualFilePath)))
            {
                if (!System.IO.File.Exists(Server.MapPath(id)))
                {
                    Bitmap mg = new Bitmap(Server.MapPath(actualFilePath));
                    ResizeImage(mg, id, new Size(250, 250));
                    Response.StatusCode = 200;
                }
            }
            else
            {
                Response.StatusCode = 404;
                return Content("404", "text/plain");
            }
        }
        if (flag == false)
        {
            Response.StatusCode = 404;
            ViewBag.Message = 404;
            return View("Error");
        }

        return File(id, "image/JPEG");
        //return Content("404", "text/plain");
    }
4

0 に答える 0