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


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

基本上,AJAX调用是 ~/Stocks/GetStockData/{id} 在哪里 {id} 是股票代码。

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

在我看来,BIN可能是一个保留字,要求一些二进制文件或其他东西。是这样的吗?如何在没有经过多少努力的情况下解决这个问题?还有其他关键字也会导致此问题吗?

UPDATE

根据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 目录,我赞成这种预防。

所以我想知道如何告诉一组特定的方法来获取类似的东西 BIN, 要么 CONFIG (理论上)如果有确定的路线可以吗?


3140
2018-04-12 12:44


起源

我强烈怀疑。你只是传输一个字符串值,没有什么可以解释为其他东西。您是否有任何可以帮助我们的内部错误消息? - Jeroen Vannevel
这实际上是可能的。看到这个问题: stackoverflow.com/questions/6194624/... - Artyom Neustroev
是的。它与安全过滤器有关,它保护内部ASP.NET文件,如web.config和Bin文件夹。根据Phil Haack的链接博客文章,使用宽松的URL规则应该是一种解决方法。 - Jonas H
那有什么消息来源吗?以上来源和 这个 只能参考那份清单 COM1-9, LPT1-9, AUX, PRT, NUL, CON。 - Jeroen Vannevel
嗯...添加配置让我 HTTP Error 404.8 - Not Found The request filtering module is configured to deny a path in the URL that contains a hiddenSegment section. - Jeremy Holovacs


答案:


所以这是一个概要:

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

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

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

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

另一个选项,我去的那个,是将我的AJAX调用改为a POST 方法。然后该值不在URL中,并且整个问题被规避。

感谢所有让我达到这一点的人。


9
2018-04-12 13:45