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

MVC路由配置中处理编码特殊字符的404问题求助

解决C# MVC含特殊字符URL的404问题

问题根源

你的URL中包含编码后的斜杠%2f(对应原字符/),ASP.NET默认将这类URL视为安全风险,会直接拦截请求返回404,根本不会进入路由匹配环节。另外需确认是否有其他路由规则优先级高于Default4,导致匹配失败。

解决方案

1. 配置Web.config允许特殊字符URL

修改项目根目录的web.config文件,调整以下两个核心节点:

(1)调整httpRuntime设置

在<system.web>节点下添加或修改httpRuntime配置:

<system.web>
  <httpRuntime targetFramework="你的.NET版本" 
               requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:\,?" 
               relaxedUrlToFileSystemMapping="true" />
</system.web>
  • requestPathInvalidCharacters:移除默认包含的/和\,避免ASP.NET拦截含%2f的请求
  • relaxedUrlToFileSystemMapping="true":允许URL路径与文件系统路径不完全匹配,解决路径解析冲突

(2)配置IIS请求过滤(针对IIS 7+)

如果部署在IIS环境,需在<system.webServer>节点下添加requestFiltering配置:

<system.webServer>
  <security>
    <requestFiltering allowDoubleEscaping="true">
      <requestLimits />
      <fileExtensions allowUnlisted="false" />
      <hiddenSegments />
      <verbs allowUnlisted="true" />
      <queryString requestLimits="1000" />
    </requestFiltering>
  </security>
</system.webServer>
  • allowDoubleEscaping="true":允许双重编码的字符(如%2f)通过请求过滤

2. 调整路由优先级

确保Default4路由在其他路由之前注册,避免被更具体的路由规则抢占匹配权:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    // 将Default4路由放在最前面
    routes.MapRoute(
        name: "Default4",
        url: "{param1}/{param2}/{param3}/{param4}",
        defaults: new { controller = "Home", action = "Index" }
    );

    // 其他路由规则放在后面
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

3. 验证参数绑定

你的控制器方法参数名称(param1-param4)与路由占位符完全匹配,无需额外修改。若后续特殊字符出现在其他路径段,只要路由占位符与参数名称对应即可正常绑定。

测试验证

修改配置后重启站点,访问示例URL,检查是否能进入HomeController.Index方法。若仍有问题,可通过调试工具查看路由匹配过程,确认请求是否到达路由解析环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 23:47:32