Jer*_*acs 11 c# iis asp.net-mvc asp.net-routing asp.net-mvc-4
我有一个股票查询应用程序,它根据股票代码返回数据.
基本上,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>
Run Code Online (Sandbox Code Playgroud)
......让我更进一步.用这个运行我的网站时,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.
Run Code Online (Sandbox Code Playgroud)
好吧,这实际上是有道理的.路由设置为阻止某人进入我的bin目录,我赞成这种预防.
所以我想知道如何告诉一组特定的方法,如果有一个定义的路线,那么得到的东西BIN,或 CONFIG(理论上)是好的?
Jer*_*acs 10
所以这是一个概要:
路由机制考虑了隐藏的目录和文件(如web.config,/ bin等)并将其隐藏起来.对于其中一些规则,规则可以放宽一点,因为它们是在代码中处理的.这些"关键词"是:CON,COM1,COM2,COM3,COM4,LPT1,LPT2,AUX,PRN,和NUL.这些实际上可以通过更改web.config文件来引用:
<configuration>
<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true"/>
<!-- ... your other settings ... -->
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
但是,其他类型的隐藏关键字不是在代码中管理,而是在IIS中管理.您有两种选择.您可以按照Artyom Neustroev(他链接到这个)的建议修改IIS设置,这对我来说有点危险,但我希望它会起作用.
另一个选项,我使用的那个,是将我的AJAX调用更改为POST方法.然后该值不在URL中,并且整个问题被规避.
感谢所有让我达到这一点的人.
| 归档时间: |
|
| 查看次数: |
768 次 |
| 最近记录: |