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())
);
誰かが私が間違っている場所を知っていますか?
前もって感謝します。