0

我想在目录浏览中显示 404 not found 错误,而不是来自 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?

4

2 回答 2

1

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

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

<handlers>
    <add name="NoAccess" verb="*" path="Services/"  preCondition="integratedMode" type="Namespace.DirectoryBrowsingAttempt"/>
</handlers>
于 2014-07-21T16:43:40.273 回答
0

我通过为服务文件夹下的文件添加通配符处理程序找到了一个简单的解决方案,然后将这些文件传递给 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 作为捕获所有处理程序。

于 2014-05-15T12:31:21.277 回答