我想在目录浏览中显示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?
答案 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处理程序。