IIS在目录浏览而不是403上抛出404但不在其中的文件中抛出404

时间:2014-05-15 12:03:57

标签: 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
{
    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?

2 个答案:

答案 0 :(得分:1)

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

将其打开,或添加asterik作为结尾,将忽略该路径中的所有文件。

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

答案 1 :(得分:0)

我通过为services文件夹下的文件添加通配符处理程序找到了一个简单的解决方案,然后将其传递给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作为catch all处理程序。