You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC生产环境Elmah报路径/控制器异常求助

解决生产环境Elmah捕获的随机路径/操作方法NotFound异常

兄弟,这俩错误我太熟了——一看那些带随机数字的non-existent-xxxxxx后缀,就知道是爬虫或者恶意扫描工具在瞎折腾你的站点,根本不是你代码的问题!这类工具会自动生成各种奇怪的路径/方法名,尝试探测站点漏洞,结果触发了ASP.NET的路由匹配逻辑,最终抛出这些HttpException。

给你几个实用的解决思路:

1. 让路由直接忽略这类请求

在你的RouteConfig.cs(或者Startup.cs里的路由配置)中添加忽略规则,匹配带non-existent-+随机数字的路径,让ASP.NET直接跳过控制器匹配:

// RouteConfig.cs示例
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
    // 添加这条规则,忽略带non-existent-数字后缀的请求
    routes.IgnoreRoute("{*invalidpath}", new { invalidpath = @".*non-existent-\d+" });

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

这样这类请求会直接返回404,不会触发控制器查找的异常。

2. 配置自定义404错误页

生产环境一定要配置自定义404页面,既提升用户体验,也能让这类无效请求的处理更规范,避免不必要的异常日志。在web.config里添加:

<system.web>
  <customErrors mode="On" defaultRedirect="~/Error/General">
    <error statusCode="404" redirect="~/Error/NotFound"/>
  </customErrors>
</system.web>

记得在你的ErrorController里实现NotFound操作方法,返回对应的视图。

3. 让Elmah过滤这类日志

如果不想完全拦截请求,只是不想让Elmah记录这些无效的404错误,可以在web.config的Elmah配置节点中添加过滤规则:

<elmah>
  <!-- 其他Elmah配置 -->
  <errorFilter>
    <test>
      <and>
        <equal binding="HttpStatusCode" value="404" type="Int32" />
        <regex binding="Context.Request.Path" pattern="non-existent-\d+" />
      </and>
    </test>
  </errorFilter>
</elmah>

这样Elmah会自动跳过符合条件的错误日志,减少日志噪音。

4. 从源头拦截恶意请求

检查服务器的访问日志,找到这些请求的来源IP,如果是固定的恶意爬虫,可以通过服务器防火墙或者IIS的IP限制规则,直接拦截这些IP的请求,从根源减少这类无效请求。

内容的提问来源于stack exchange,提问作者Tanveer Fatima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:27:25