0

たぶん、私は間違ったことを探しているか、これを間違った方法で実装しようとしています。Generic Handler を使用して画像を動的に生成しています。現在、次を使用してハンドラーにアクセスできます。

ImageHandler.ashx?width=x&height=y

次のようなものを使用してハンドラーにアクセスしたい

images/width/height/imagehandler

Googleで見つけたいくつかの例がMVC2で機能しなかった可能性はありますか?

乾杯。

4

2 に答える 2

5

昨夜もこの問題に取り組み続けたところ、驚いたことに、自分が考えていた解決策に近づいていました。将来これに苦労する可能性がある人のために、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" />

汎用ハンドラーを使用して、必要に応じて動的透かしを生成しました。うまくいけば、これは他の人を助けるでしょう.

ご不明な点がございましたら、お気軽にお問い合わせください。可能な限りお手伝いさせていただきます。

于 2010-10-31T00:52:10.113 に答える