Asp.net IIS在目录浏览时抛出404,而不是403,但不在目录浏览中抛出文件

Asp.net IIS在目录浏览时抛出404,而不是403,但不在目录浏览中抛出文件,asp.net,iis,web-config,iis-handlers,Asp.net,Iis,Web Config,Iis Handlers,我希望在目录浏览中显示404未找到错误,而不是来自asp.net的标准403未经授权消息,但不显示其中的文件。例如: www.somedomain.com/services - 404 not found www.somedomain.com/services/test.asmx - 200 ok 我尝试执行如下自定义通用处理程序: public class DirectoryBrowsingAttempt : IHttpHandler { publ

我希望在目录浏览中显示404未找到错误,而不是来自asp.net的标准403未经授权消息,但不显示其中的文件。例如:

 www.somedomain.com/services             -  404 not found
 www.somedomain.com/services/test.asmx   -  200 ok
我尝试执行如下自定义通用处理程序:

public class DirectoryBrowsingAttempt : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.StatusCode = 404;
    }

    public bool IsReusable
    {
        get
        {
            return true;
        }
    }
}
在web.config下的

 <handlers>
  <add name="NoAccess" verb="*" path="Services"  preCondition="integratedMode" type="Namespace.DirectoryBrowsingAttempt"/>
</handlers>


这将为目录和其中的文件抛出404。有没有办法避免文件使用404?

我找到了一个简单的解决方案,为服务文件夹下的文件添加了一个通配符处理程序,然后将其传递给System.Web.Script.services.ScriptHandlerFactory处理程序

  <add name="Services" verb="*" path="Services/*"  preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  <add name="ServicesNoAccess" verb="*" path="Services"  preCondition="integratedMode" type="System.Web.StaticFileHandler"/>


还要注意的是,对于目录抛出404并不需要通用处理程序。相反,请使用System.Web.StaticFileHandler,它可以作为一个全面处理程序

只需在路径后添加斜杠即可。但我唯一不喜欢的是子文件夹。您必须为每一级目录添加一个特定的配置

保持其打开状态,或添加星号作为结束,将忽略该路径中的所有文件

<handlers>
    <add name="NoAccess" verb="*" path="Services/"  preCondition="integratedMode" type="Namespace.DirectoryBrowsingAttempt"/>
</handlers>