ASP.NET路由 - 如何对.aspx请求响应404

3

我正在使用WebForms中的路由功能来清理URL。我将所有的.aspx文件存储在/Pages目录下,并通过干净的URL路由到它们。目前,我仍然可以通过导航到例如/Pages/Home.aspx来访问这些文件。如何在我的路由表中抛出404或重定向到另一个页面?以下是我尝试过的方法:

routes.RouteExistingFiles = true;
routes.Ignore("{resource}.aspx/{*pathInfo}");
routes.Ignore(@"*\.aspx");

routes.MapPageRoute("Home", "", "~/Pages/Home.aspx");

这完全不起作用,我需要一些建议。

如果我尝试访问MVC网站上的物理文件,我会得到以下错误:

对象引用未设置为对象的实例。

我能在WebForms上做到吗?


我从文档中得到了那行代码。那行代码可以使已经存在于磁盘上的文件进行路由。 - Zerkey
默认为false,允许在URL正确时直接访问文件。在试图禁止文件访问的过程中,我将其设置为true,以便我的路由程序可以处理所有传入请求。虽然没有改变任何东西,但我仍将其留在代码中。 - Zerkey
抱歉 - 你是对的 - 我记错了。需要自己阅读文档 :). 我相信问题在于 Ignore(@"*\.aspx"); - 你明确要求不路由所有的 aspx 文件。你还需要一些匹配 "pages/{name}.aspx" URL 的路由(这是你的 404 报告应该出现的地方)。 - Alexei Levenkov
那行代码实际上非常关键。我之前因为你的评论把它删掉了,然后尝试了你建议的最后一部分,虽然很有道理但是不起作用。把那行代码加回去,然后 bingo! - Zerkey
1个回答

0
routes.RouteExistingFiles = true;
routes.MapPageRoute("Route1", "Pages/{page}.aspx", "~/404.aspx");
routes.MapPageRoute("Route2", "Pages/{folder}/{page}.aspx", "~/404.aspx");

不要忽略这个路由,你需要将它映射到一个页面,该页面抛出404而不是响应。希望这能帮助其他人!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接