也許我在尋找錯誤的東西或試圖以錯誤的方式實現。我使用通用處理程序動態生成圖像。C#ASP.NET MVC2路由通用處理程序
ImageHandler.ashx?width=x&height=y
我寧願訪問使用我的東西像處理
images/width/height/imagehandler
這是可能的我在谷歌找到了幾個例子,不與MVC2工作:我可以使用當前訪問我的處理程序。
乾杯。
也許我在尋找錯誤的東西或試圖以錯誤的方式實現。我使用通用處理程序動態生成圖像。C#ASP.NET MVC2路由通用處理程序
ImageHandler.ashx?width=x&height=y
我寧願訪問使用我的東西像處理
images/width/height/imagehandler
這是可能的我在谷歌找到了幾個例子,不與MVC2工作:我可以使用當前訪問我的處理程序。
乾杯。
昨晚我繼續研究這個問題,令我驚訝的是我更接近我曾想過的解決方案。對於任何可能在將來遇到此問題的人來說,我都是如何將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" />
我使用的通用處理器在需要時生成動態水印調用處理。希望這可以幫助別人。
如果您有任何問題,請告訴我,我會盡可能幫助您。
我現在使用很長一段時間的解決方案,你可以把它通用的,所以它會接受你就必須在未來的任何處理程序:
internal class RouteGenericHandler<T> : IRouteHandler where T : IHttpHandler, new()
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new T();
}
}
而上的RegisterRoutes方法:
routes.Add(new Route("Name", new RouteGenericHandler<TestHandler>()));
太棒了。這對我有效。唯一的是,在你的代碼中添加到Global.asax時,你應該提到ImageShadowRouteHandler,它應該是ImageHandlerRouteHandler – wozza 2011-05-31 03:54:44
真的很好的解決方案。我喜歡它,而不需要管理控制器遺留處理程序的代碼。 – 2011-12-15 07:30:57