代码之家  ›  专栏  ›  技术社区  ›  Magnus Johansson

如何在ASP.NET MVC中使用相同名称的文件夹和控制器?

  •  11
  • Magnus Johansson  · 技术社区  · 16 年前

    我有一个叫做下载的MVC控制器。 http://mysite/Downloads

    我还想把一个物理文件放在一个名为 http://mysite/Downloads/MyFile.zip .

    如果我只是创建一个文件夹,当浏览到 http://mysite/下载 . (很可能是因为目录浏览被禁用) 但我想让MVC控制器来代替。

    我该怎么做?

    2 回复  |  直到 9 年前
        1
  •  5
  •   cheesemacfly Deisbel R Diaz    12 年前

    如果您浏览到 http://mysite/Downloads/{ACTION} 它将触发控制器操作。

    在你的例子中唯一不起作用的是 /Downloads 没有行动。您可以重新编写此URL以重定向到默认操作。

    此外,还需要让RouteHandler忽略下载文件。您可以在global.asax文件中添加一行,以忽略所有zip文件或其他适合的忽略模式。

    routes.Ignore("{resource}.zip");
    
        2
  •  5
  •   rism    10 年前

    由于.NET 3.5,您可以路由现有文件:

    public static void RegisterRoutes(RouteCollection routes) {
        routes.RouteExistingFiles = true;
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
           name: "Default",
           url: "{controller}/{action}/{id}",
           defaults: new { controller = "Home", 
                              action = "Index", 
                              id = UrlParameter.Optional }
        );
    }
    

    所以假设我们在站点根目录上有一个名为 Markets 包含一个 audio.mp3 文件:

    \Markets
    \Markets\audio.mp3
    

    假设存在一个 MarketsController ,如果我们要求 市场 ,它将被传送到 Markets/Index .

    如果我们要求 /Markets/audio.mp3 我们会得到MP3文件,如果我们要求的话 Markets/AnythingElse ,将应用常规路由。

    推荐文章