我有一个需要身份验证的应用程序,但有一些相关的服务可以匿名调用应用程序。调用是通过httpHandlers进行的,其中一些使用通配符。对于不使用通配符的httpHandler,我可以使用web.config中的location元素来管理安全性:
<httpHandlers>
<add verb="*" path="ProcessFile.ashx" type="..." validate="false" />
<add verb="*" path="DoSomethingElse.*.*.ashx" type="..." validate="false" />
</httpHandlers>
对于第一个处理程序,它很简单(为简洁起见省略了结束标记):
<location path="ProcessFile.ashx">
<system.web>
<authorization>
<allow users="?" />
...
第二个处理程序不起作用,因为location不会使用通配符。我尝试使用'目录',但它似乎不起作用:
<httpHandlers>
..
<add verb="*" path="test/DoSomethingElse.*.*.ashx" type="..." validate="false" />
</httpHandlers>
<location path="test">
<system.web>
<authorization>
<allow users="?" />
...
有没有办法让它发挥作用?我在某种程度上有错误的语法吗?
答案 0 :(得分:1)
我建议将预期匿名的处理程序隔离到公共文件夹中,然后将该文件夹的位置权限设置为普遍可用。因此,如果您有一个处理程序/Handlers
和一个子文件夹/Public
的文件夹,那么您可以拥有以下内容:
<location path="/Handlers/Public">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
然后,您可以将通配符处理程序放在此处,而无需按个人名称指定它。