昨夜もこの問題に取り組み続けたところ、驚いたことに、自分が考えていた解決策に近づいていました。将来これに苦労する可能性がある人のために、MVC2 ルーティングを汎用ハンドラーに実装する方法を次に示します。
まずはIRouteHandlerを継承したクラスを作成
public class ImageHandlerRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var handler = new ImageHandler();
handler.ProcessRequest(requestContext);
return handler;
}
}
次に、MVC に適した ProcessRequest を作成する汎用ハンドラーを実装しました。
public void ProcessRequest(RequestContext requestContext)
{
var response = requestContext.HttpContext.Response;
var request = requestContext.HttpContext.Request;
int width = 100;
if(requestContext.RouteData.Values["width"] != null)
{
width = int.Parse(requestContext.RouteData.Values["width"].ToString());
}
...
response.ContentType = "image/png";
response.BinaryWrite(buffer);
response.Flush();
}
次に、global.asax へのルートを追加しました
RouteTable.Routes.Add(
new Route(
"images/{width}/{height}/imagehandler.png",
new ImageShadowRouteHandler()
)
);
次に、次を使用してハンドラーを呼び出すことができます
<img src="/images/100/140/imagehandler.png" />
汎用ハンドラーを使用して、必要に応じて動的透かしを生成しました。うまくいけば、これは他の人を助けるでしょう.
ご不明な点がございましたら、お気軽にお問い合わせください。可能な限りお手伝いさせていただきます。