2013-10-25 181 views
1

我已經創建了一個ImageController來從我的項目中的位置提供圖像。現在我試圖讓它從「/Image/file.png」路由到我的控制器,但我似乎無法做到。控制器從來沒有被調用過(我在動作的第一行設置了一個斷點,它從不中斷)。URL不會路由到控制器

我的路線:

routes.MapRoute(
      "Image", 
      "Image/{file}", 
      new { controller = "Image", action = "Render", file = "" } 
     ); 

我ImageController:

public class ImageController : Controller 
{ 
    // 
    // GET: /Image/ 

    public ActionResult Render(string file) 
    { 
     var path = this.getPath(file); 
     System.Diagnostics.Debug.WriteLine(path); 
     if (!System.IO.File.Exists(path)) 
     { 
      return new HttpNotFoundResult(string.Format("File {0} not found.", path)); 
     } 
     return new ImageResult(path); 
    } 

    private string getPath(string file) 
    { 
     return string.Format("{0}/{1}", Server.MapPath("~/Content/Images"), file); 
    } 
} 

爲什麼不從 「圖像/ {}文件的」 我的項目路由到我的控制器?

+0

這可能會有所幫助:http://stackoverflow.com/questions/11257768/asp-net-mvc-route-bypass-staticfile-handler-for-path。從Scott的文章中,您可能可以將* .png,*。gif,* .jpg通配符用於處理這些請求的處理程序。 – TSmith

回答

1

這可能是由於url中的.png擴展名導致請求被路由到靜態文件處理程序。你可以嘗試通過文件名和後綴爲單獨的參數,像這樣:然後

routes.MapRoute(
     "Image", 
     "Image/{filename}/{suffix}", 
     new { controller = "Image", action = "Render", filename = "", suffix = "" } 
); 

你的控制器動作變爲:

public ActionResult Render(string filename, string suffix) 

它應該匹配的URL是這樣的:

/Image/file/png