2010-03-14 55 views
3

可有人請幫助我,因爲我不知道爲什麼 公衆的IHttpHandler GetHttpHandler(RequestContext的的RequestContext) 不執行。在我的Global.asax.cs我有ASP.NET MVC 2.0 +一個IRouteHandler的實施不火

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 

     routes.Add("ImageRoutes", new Route("Images/{filename}", new CustomRouteHandler())); 

    } 

    protected void Application_Start() 
    { 
     RegisterRoutes(RouteTable.Routes); 
    } 
} 

// CustomRouteHandler實現低於

public class CustomRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     // IF I SET A BREAK POINT HERE IT DOES NOT HIT FOR SOME REASON. 
     string filename = requestContext.RouteData.Values["filename"] as string; 

     if (string.IsNullOrEmpty(filename)) 
     { 
      // return a 404 HttpHandler here 
     } 
     else 
     { 
      requestContext.HttpContext.Response.Clear(); 
      requestContext.HttpContext.Response.ContentType = GetContentType(requestContext.HttpContext.Request.Url.ToString()); 

      // find physical path to image here. 
      string filepath = requestContext.HttpContext.Server.MapPath("~/logo.jpg"); 

      requestContext.HttpContext.Response.WriteFile(filepath); 
      requestContext.HttpContext.Response.End(); 

     } 
     return null; 
    } 
} 

任何機構可以告訴我,我在這裏失蹤。只需 公共IHttpHandler GetHttpHandler(RequestContext requestContext)不會觸發。

我也不會改變web.config中的任何東西。我在這裏錯過了什麼?請幫忙。

回答

4
routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
); 

routes.Add("ImageRoutes", new Route("Images/{filename}", new CustomRouteHandler())); 

您需要翻轉這兩個聲明。 {controller}/{action}/{id}可能與傳入網址匹配,因此您需要在其之前聲明您的特殊圖片/ {filename}

+0

謝謝。但仍然不起作用。 – Peter 2010-03-14 06:10:24

+1

對不起,你的解決方案是問題的一部分,但我發現更多這:)這是我的錯。我在一個名爲Content的目錄下有我的圖像,即內容/圖像/ {文件名}。在提交帖子前應該進行雙重檢查。道歉,並感謝您的幫助。 – Peter 2010-03-14 06:48:52