URL不会路由到控制器

时间:2013-10-25 13:32:51

标签: asp.net-mvc-4 asp.net-mvc-routing

我创建了一个ImageController,用于从项目中的某个位置提供图像。现在我试图让它从" /Image/file.png"我的控制器,但我似乎无法做到正确。永远不会调用控制器(我在操作的第一行设置断点,它永远不会中断)。

我的路线:

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);
    }
}

为什么我的项目不是来自" Images / {file}"到我的控制器?

1 个答案:

答案 0 :(得分:1)

这可能是因为请求被路由到静态文件处理程序,因为url中的.png扩展名。您可以尝试将文件名和后缀作为单独的参数传递,如下所示:

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

您的控制器操作将变为:

public ActionResult Render(string filename, string suffix)

它应该匹配这样的网址:

/Image/file/png