ASP.NET MVC4 ...是“BIN”保留的关键字?

时间:2014-04-12 12:44:28

标签: c# asp.net-mvc asp.net-mvc-4 iis asp.net-routing

我有一个股票查询应用程序,它根据股票代码返回数据。

基本上,AJAX调用转到~/Stocks/GetStockData/{id},其中{id}是股票代码。

一般来说这很好用。今天,我发现有“BIN”标志的“Progressive Waste Solutions Ltd.”股票爆炸了。查看浏览器中的返回数据,我看到它为此符号返回404。

我想到BIN可能是一个保留字,要求一些二进制文件或其他东西。是这样的吗?如何在不花费大量精力的情况下解决这个问题?是否有其他关键字也会导致此问题?

更新

根据Artyom Neustroev,这可能是一个保留的关键字,并且会受到保护,不会路由到。他引用了一篇引用网站的文章,其中说明了解决方法是在配置文件中添加以下配置设置:

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

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

......让我更进一步。使用此网站运行我的网站后,ajax调用返回 404.8 错误:

HTTP Error 404.8 - Not Found
The request filtering module is configured to deny a path in the URL that contains a hiddenSegment section.

好的,这实际上是有道理的。设置路由是为了防止有人进入我的bin目录,我赞成这种预防。

所以我想知道如何告诉特定的一组方法,如果有一个定义的路径,那么获取BINCONFIG(理论上)这样的东西是可以的吗?

1 个答案:

答案 0 :(得分:9)

所以这是一个概要:

路由机制考虑了隐藏的目录和文件(如web.config,/ bin等)并将其隐藏起来。对于其中一些规则,规则可以放宽一点,因为它们是在代码中处理的。这些“关键字”包括:CONCOM1COM2COM3COM4LPT1LPT2,{{ 1}},AUXPRN。实际上可以通过更改web.config文件来引用它们:

NUL

然而,其他类型的隐藏关键字不是在代码中管理,而是在IIS中管理。您有两种选择。您可以按照Artyom Neustroev(他链接到this)的建议修改IIS设置,这对我来说有点危险,但我希望它会起作用。

我选择的另一个选项是将我的AJAX调用更改为<configuration> <system.web> <httpRuntime relaxedUrlToFileSystemMapping="true"/> <!-- ... your other settings ... --> </system.web> </configuration> 方法。然后该值不在URL中,并且整个问题被规避。

感谢大家帮我解决这个问题。