ASP.NET MVC 路由与 Windows 中的保留文件名

Posted

技术标签:

【中文标题】ASP.NET MVC 路由与 Windows 中的保留文件名【英文标题】:ASP.NET MVC Routing vs. Reserved Filenames in Windows 【发布时间】:2009-06-12 14:58:59 【问题描述】:

在我们的 ASP.NET MVC 应用程序中,我们注意到我们不能拥有禁止的 DOS 文件名 —COM1COM9LPT1LPT9CONAUX、@ 987654330@ 和 NUL——我们航线的任何地方。它们不可避免地导致 IIS 告诉我们找不到文件,即使我们将路由设置为不首先检查文件是否存在。我们如何解决这个问题?

【问题讨论】:

为了好玩,点击***.com/com1并与***.com/ThisDoesNotExist比较 利用这些知识,我现在成功地让导航到我的用户页面变得不可能。呜呜呜。 我喜欢你自己 DOS 的方式。 非常酷;但并非不可能 - 用户信息路由中不需要用户名;) microsoft.com/com1.aspx)) 【参考方案1】:

这已在 ASP.NET 4 中得到解决。http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx

您可以在 web.config 中应用一个放宽此限制的设置。

<configuration>
  <system.web>
    <httpRuntime relaxedUrlToFileSystemMapping="true"/>

    <!-- ... your other settings ... -->
  </system.web>
</configuration>

希望对您有所帮助。

【讨论】:

@thekaid:向后兼容性:MS 不能确定没有人依赖旧的行为。 @thekaido 理查德所说的完全正确。您会对人们开始依赖的错误类型感到惊讶。【参考方案2】:

自从提出这个问题后,我发现该错误在 ASP.NET 中,而不是在 IIS 或 ASP.NET MVC 中,这意味着没有办法解决它。唯一的解决方案是手动禁止匹配这些名称以及这些名称后跟句点和随机字符的 URL。

【讨论】:

是的。 :) ASP.NET 团队意识到了这个错误,并正在为 ASP.NET 4 研究它。不能保证它是否会被修复,但至少有兴趣为开发人员改进它。【参考方案3】:

出于类似的原因,*** 中不能有 web.config 标签。

http://***.uservoice.com/pages/1722-general/suggestions/98871-web-config-tag-404-error

【讨论】:

【参考方案4】:

由于另一个类似的原因,您不能使用带有点和斜杠的网址 Semantic urls with dots in .net

【讨论】:

以上是关于ASP.NET MVC 路由与 Windows 中的保留文件名的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC如何设置路由启动

如何在 ASP.NET MVC 中使用路由修复 404?

源码的说明 ASP.NET MVC 5框架揭秘.zip

为啥在 asp.net mvc 中的公共路由之前先映射特殊路由?

ASP.NET MVC学习之路由篇

IIS 6 上的 ASP.NET MVC - 通配符映射 - 传入请求与任何路由都不匹配