J'ai continué à travailler sur ce problème hier soir et à ma grande surprise j'étais plus proche de la solution que j'avais imaginée. Pour ceux qui pourraient avoir des difficultés avec cela à l'avenir voici comment j'ai implémenté le routage MVC2 dans un gestionnaire générique.
D'abord, je créé une classe qui a hérité IRouteHandler
public class ImageHandlerRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var handler = new ImageHandler();
handler.ProcessRequest(requestContext);
return handler;
}
}
Je puis mis en œuvre le gestionnaire générique créer un MVC convivial 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();
}
ensuite ajouté une route vers le global.asax
RouteTable.Routes.Add(
new Route(
"images/{width}/{height}/imagehandler.png",
new ImageShadowRouteHandler()
)
);
vous pouvez appeler votre gestionnaire en utilisant
<img src="/images/100/140/imagehandler.png" />
J'ai utilisé le gestionnaire générique pour générer des filigranes dynamiques en cas de besoin. Espérons que cela aide les autres.
Si vous avez des questions faites le moi savoir et je vais essayer de vous aider dans la mesure du possible.
Fantastique. Cela a fonctionné pour moi. La seule chose est, dans votre code ajouté à Global.asax vous mentionnez ImageShadowRouteHandler quand il devrait être ImageHandlerRouteHandler – wozza
Solution vraiment sympa. Je l'ai aimé que je n'ai pas besoin de gérer le code d'un gestionnaire hérité pour les contrôleurs. –