我有一个股票查询应用程序,它根据股票代码返回数据。
基本上,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
目录,我赞成这种预防。
所以我想知道如何告诉特定的一组方法,如果有一个定义的路径,那么获取BIN
或CONFIG
(理论上)这样的东西是可以的吗?
答案 0 :(得分:9)
所以这是一个概要:
路由机制考虑了隐藏的目录和文件(如web.config,/ bin等)并将其隐藏起来。对于其中一些规则,规则可以放宽一点,因为它们是在代码中处理的。这些“关键字”包括:CON
,COM1
,COM2
,COM3
,COM4
,LPT1
,LPT2
,{{ 1}},AUX
和PRN
。实际上可以通过更改web.config文件来引用它们:
NUL
然而,其他类型的隐藏关键字不是在代码中管理,而是在IIS中管理。您有两种选择。您可以按照Artyom Neustroev(他链接到this)的建议修改IIS设置,这对我来说有点危险,但我希望它会起作用。
我选择的另一个选项是将我的AJAX调用更改为<configuration>
<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true"/>
<!-- ... your other settings ... -->
</system.web>
</configuration>
方法。然后该值不在URL中,并且整个问题被规避。
感谢大家帮我解决这个问题。