Asp.net 如何在需要身份验证的站点中授予对使用通配符的httpHandler的匿名访问权限?
我有一个需要身份验证的应用程序,但是有一些相关的服务可以作为匿名调用到应用程序中。调用是通过HttpHandler进行的,其中一些使用通配符。对于不使用通配符的HttpHandler,我可以使用web.config中的location元素来管理安全性:Asp.net 如何在需要身份验证的站点中授予对使用通配符的httpHandler的匿名访问权限?,asp.net,Asp.net,我有一个需要身份验证的应用程序,但是有一些相关的服务可以作为匿名调用到应用程序中。调用是通过HttpHandler进行的,其中一些使用通配符。对于不使用通配符的HttpHandler,我可以使用web.config中的location元素来管理安全性: <httpHandlers> <add verb="*" path="ProcessFile.ashx" type="..." validate="false" /> <add verb="*" path="
<httpHandlers>
<add verb="*" path="ProcessFile.ashx" type="..." validate="false" />
<add verb="*" path="DoSomethingElse.*.*.ashx" type="..." validate="false" />
</httpHandlers>
对于第一个处理程序,它很简单(为了简洁起见,省略了结束标记):
...
第二个处理程序将不工作,因为位置将不使用通配符。我尝试使用“目录”,但似乎不起作用:
<httpHandlers>
..
<add verb="*" path="test/DoSomethingElse.*.*.ashx" type="..." validate="false" />
</httpHandlers>
<location path="test">
<system.web>
<authorization>
<allow users="?" />
...
..
...
有没有办法让它发挥作用?我的语法是否有错误?我建议将预期匿名可用的处理程序分离到一个公共文件夹中,然后将该文件夹的位置权限设置为通用。因此,如果您有一个用于处理程序
/handlers
的文件夹和一个子文件夹/Public
,那么您可以拥有以下内容:
<location path="/Handlers/Public">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
然后,您可以将通配符处理程序放在这里,而不必通过单独的名称指定它。这就是我在尝试使用“test”目录时所做的。语法中有什么我遗漏的吗?好的,这很有效,我说得对,只是脚本中隐藏了另一个处理程序,我没有注意到它需要同样的处理。
<location path="/Handlers/Public">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>