2

http://mydomain.com/images/123/myimage.jpgや .../123/myimage など、フレンドリーな方法で画像を返すハンドラーを構築できるようにしようとしています。

.NET Forms と ashx ファイルを使用する前に、これを行ったことがあります。

私は現在MVC 4(私は初めてです)を使用しており、同じことをしようとしています。古いコードの多くを再利用し、プロジェクトに ashx ファイルを追加し、クエリ文字列を通過させてイメージを正常に生成しました。ただし、URL 書き換えを機能させることはできません。

私の古いコードでは、次を使用しました。

        RouteTable.Routes.MapHttpHandlerRoute("imagestoret", "imagestore/{fileId}", "~/Images/ImageHandler.ashx");
        RouteTable.Routes.Add(new Route("imagestore/{fileId}", new PageRouteHandler("~/Images/ImageHandler.ashx")));

MapHttpHandlerRoute は、以下を含むインターネット上で見つかったカスタム クラスです。

    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        if (!string.IsNullOrEmpty(_virtualPath))
        {
            return (IHttpHandler)System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(_virtualPath, typeof(IHttpHandler));
        }
        else
        {
            throw new InvalidOperationException("HttpHandlerRoute threw an error because the virtual path to the HttpHandler is null or empty.");
        }
    }

それ以来、クエリ文字列で正常に機能するコントローラーに変換しようとしましたが、ルーティングを追加しようとすると、まだ 404 エラーが返されます。

routes.MapRoute(
            "ImageProvider",
            "imagestore/{fileId}/",
            new { controller = "File", action = "GetFile", id = UrlParameter.Optional });

インターネットから ImageRouteHandler も試しました。

    public class ImageRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        // Do stuff
    }
}

そして、RouteConfig.cs に以下を追加します。

        routes.Add("MyImageHandler",
            new Route("imagex/{fileId}",
            new ImageRouteHandler())
        );

誰かが私が間違っている場所を知っていますか?

前もって感謝します。

4

1 に答える 1