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

MVC 5路由传入URL编码参数报404如何解决 是否需调整IIS设置

需求实现结论

该需求在MVC 5中完全可以实现,需配合少量IIS配置调整。出现404的核心原因是IIS默认会拦截路径中包含编码后冒号(%3A)、斜杠(%2F)等特殊字符的请求,防止路径遍历攻击,请求不会进入MVC路由处理环节。

具体实现步骤

1. 调整IIS配置(必填)

修改项目根目录的Web.config文件,添加如下配置:

  • 关闭路径非法字符校验:在system.web节点下添加httpRuntime配置,你可以选择仅移除不需要拦截的字符,或者完全关闭路径非法字符校验(前者安全性更高):
<!-- 方案1:仅移除冒号拦截,保留其余安全校验 -->
<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,\,?" requestValidationMode="2.0" />

<!-- 方案2:完全关闭路径非法字符校验,安全性较低,仅建议测试环境使用 -->
<!-- <httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" /> -->
  • 允许双重转义:在system.webServer节点下添加请求过滤配置:
<security>
  <requestFiltering allowDoubleEscaping="true" />
</security>

2. 配置MVC通配符路由

默认路由规则只会捕获单个路径段的内容,你需要添加通配符路由来捕获info/后面的所有内容作为完整URL参数,在RouteConfig.cs的路由注册逻辑最上方添加如下规则:

routes.MapRoute(
    name: "InfoRedirectRoute",
    url: "info/{*targetUrl}", // *通配符表示捕获该位置后的所有路径内容作为参数
    defaults: new { controller = "Home", action = "Info" } // 替换为你实际的控制器名
);

3. 编写Action处理逻辑

控制器中对应的Info方法示例如下:

public ActionResult Info(string targetUrl)
{
    // 校验URL合法性,避免开放重定向漏洞
    if (Uri.IsWellFormedUriString(targetUrl, UriKind.Absolute))
    {
        return Redirect(targetUrl);
    }
    // 非法URL的兜底逻辑,可根据需求调整
    return RedirectToAction("Index");
}

注意:为了提升安全性,建议额外添加跳转域名白名单校验,避免该接口被利用作为钓鱼跳转的中间节点

可选无需修改IIS的方案

如果你不想调整IIS的安全配置,可以修改参数传递方式,将URL放在查询字符串中传递,例如访问地址改为https://localhost:42901/info?url=http%3A%2F%2Fwww.google.com,这种方式不需要修改任何IIS配置,只需要Action直接接收url查询参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:24:00