C# ASP.NETMVC4。。。是";“银行标识代码”;保留关键字?
我有一个股票查询应用程序,它返回基于股票符号的数据 基本上,AJAX调用转到C# ASP.NETMVC4。。。是";“银行标识代码”;保留关键字?,c#,asp.net-mvc,asp.net-mvc-4,iis,asp.net-routing,C#,Asp.net Mvc,Asp.net Mvc 4,Iis,Asp.net Routing,我有一个股票查询应用程序,它返回基于股票符号的数据 基本上,AJAX调用转到~/Stocks/GetStockData/{id},其中{id}是股票符号 这个很好用。。。通常地今天我发现股票“Progressive Waste Solutions Ltd.”爆炸了,股票上有垃圾桶的标志。查看浏览器中的返回数据,我看到该符号返回404 我突然想到BIN可能是一个保留字,要求一些二进制文件或其他东西。是这样吗?我如何不费吹灰之力就解决这个问题?是否还有其他关键字也会导致此问题 更新 根据Artyom
~/Stocks/GetStockData/{id}
,其中{id}
是股票符号
这个很好用。。。通常地今天我发现股票“Progressive Waste Solutions Ltd.”爆炸了,股票上有垃圾桶的标志。查看浏览器中的返回数据,我看到该符号返回404
我突然想到BIN可能是一个保留字,要求一些二进制文件或其他东西。是这样吗?我如何不费吹灰之力就解决这个问题?是否还有其他关键字也会导致此问题
更新
根据Artyom Neustroev的说法,这可能是一个保留的关键字,并且会受到保护,不被路由到。他引用了一篇文章,其中引用了一个网站,该网站说明了解决方法,即在配置文件中添加以下配置设置:
<configuration>
<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true"/>
<!-- ... your other settings ... -->
</system.web>
</configuration>
好吧,这其实有点道理。路由设置为防止有人进入我的bin
目录,我赞成这种预防
因此,我想知道如何告诉一组特定的方法,如果有一个已定义的路径,那么获取诸如BIN
或CONFIG
(理论上)之类的内容是可以的?因此这里有一个概要:
路由机制考虑到隐藏的目录和文件(如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>
但是,其他类型的隐藏关键字不是在代码中管理的,而是在IIS中管理的。你有两个选择。你可以按照Artyom Neustroev(他链接到)的建议修改IIS设置,这让我觉得有点危险,但我希望它会起作用
另一个选择,我选择的,是将我的AJAX调用更改为POST
方法。那么这个值就不在URL中了,整个问题都被回避了
感谢所有让我走到这一步的人。我对此深表怀疑。您只是在传输一个字符串值,不应将其解释为其他内容。您是否有任何内部错误消息可以帮助我们?这实际上是可能的。看这个问题:是的。它与保护内部ASP.NET文件(如web.config和Bin文件夹)的安全过滤器有关。根据Phil Haack的链接博客文章,使用宽松的URL规则应该是一个解决办法。有没有相关的来源?上述来源,仅指
COM1-9
,LPT1-9
,AUX
,PRT
,NUL
,CON
。嗯。。。添加该配置会使我进入HTTP错误404.8-未找到请求筛选模块被配置为拒绝URL中包含HiddenSecgment节的路径。
<configuration>
<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true"/>
<!-- ... your other settings ... -->
</system.web>
</configuration>