gpt4 book ai didi

asp.net-mvc-4 - 如何将对磁盘上存在的目录的请求路由到 ASP.NET MVC?

转载 作者:行者123 更新时间:2023-12-02 19:18:14 24 4
gpt4 key购买 nike

我有一个带有无扩展 URL 的 ASP.NET MVC 4 应用程序(使用 .NET Framework 4.5)。该站点包含一些静态文件,但所有无扩展名请求都应该进入 MVC 路由。

对于以下请求来说一切正常:

  • /
  • /新闻
  • /fr/新闻

但是,如果我向/fr 发出请求,则会收到错误:

HTTP Error 403.14 - Forbidden, 
The Web server is configured to not list the contents of this directory.

我知道这是因为磁盘上实际上存在一个/fr 目录,但是我仍然想将此请求映射到我的 MVC 应用程序。不能删除 fr 目录,因为它包含一些静态文件。

这可能吗?我尝试将 runAllManagedModulesForAllRequests="true" 添加到 system.webServer 中的模块元素中(我真的不想这样做,但无论如何它都没有帮助)。

编辑 - 如果有用,这里是路由:

    public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("cid/{*pathInfo}");
routes.MapRoute(
"Page",
"{*PageId}",
new { controller = "Page", action = "Page" }, // Parameter defaults
new { pageId = @"^(.*)?$" } // Parameter constraints
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}

最佳答案

阻止访问本地文件夹和文件的最简单方法是设置 RouteCollection.RouteExistingFiles 标志,让 ASP.NET 处理针对物理文件的 URL。因此,将您的路由寄存器更改为:

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("cid/{*pathInfo}");

routes.RouteExistingFiles = true;
routes.MapRoute(
"Page",
"{*PageId}",
new { controller = "Page", action = "Page" }, // Parameter defaults
new { pageId = @"^(.*)?$" } // Parameter constraints
);
}

您的“Default”路线不是必需的,因为“Page”实际上是一个包罗万象的情况。

另一种方法是更改​​ IIS 配置,为 ASP.NET MVC 路由提供比 IIS 目录列表更高的优先级。在 IIS7 中,访问您的网站,从 IIS 部分选择模块,然后从操作选项卡中查看有序列表。将 UrlRoutingModule 移至 DirectoryListingModule 上方。

<小时/>

作为旁注,从您的评论中我了解到您有一个具有单个操作的 Controller 。该操作将为所有请求提供服务,除了使用 IgnoreRoute 定义的静态资源。这不是推荐的设置,因为您会失去 MVC 架构的所有优势。此外,您会发现您的主页操作会迅速增长,包含越来越多的案例。这正是路由和 Controller 旨在解决的问题。

如果您认为单一的包罗万象的方法是最适合您的解决方案,那么您实际上并不需要 MVC,并且最好使用请求开销小得多的 Web API。

关于asp.net-mvc-4 - 如何将对磁盘上存在的目录的请求路由到 ASP.NET MVC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23240218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com