Asp.net 如何在需要身份验证的站点中授予对使用通配符的httpHandler的匿名访问权限?

Asp.net 如何在需要身份验证的站点中授予对使用通配符的httpHandler的匿名访问权限?,asp.net,Asp.net,我有一个需要身份验证的应用程序,但是有一些相关的服务可以作为匿名调用到应用程序中。调用是通过HttpHandler进行的,其中一些使用通配符。对于不使用通配符的HttpHandler,我可以使用web.config中的location元素来管理安全性: <httpHandlers> <add verb="*" path="ProcessFile.ashx" type="..." validate="false" /> <add verb="*" path="

我有一个需要身份验证的应用程序,但是有一些相关的服务可以作为匿名调用到应用程序中。调用是通过HttpHandler进行的,其中一些使用通配符。对于不使用通配符的HttpHandler,我可以使用web.config中的location元素来管理安全性:

<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>