【问题标题】:ASP.NET Web Api GET wont accept "." in URL ParametersASP.NET Web Api GET 不接受“。”在 URL 参数中
【发布时间】:2026-01-22 15:05:02
【问题描述】:

我目前正在开发一个 Web API,如果 FQDN 被传递给 API,它必须返回服务器列表或单个服务器。

路线是:

"api/Servers/{fqdn}"

当我从 REST 客户端对这样的 URL 执行 GET 时:

GET api/Servers/hostname.domain.com

IIS 返回 404 Not Found。

当我执行没有“。”的 GET 时在 URL 参数中:

GET api/Servers/hostname_domain_com

它成功路由到我的 API 控制器。

当我得到 404 错误页面时,它是 IIS 8 错误页面。这让我相信,当有一个“。”在 IIS 甚至没有将其传递给 MVC 管道的 URL 中,我的代码没有被执行。可能是因为 IIS 正在尝试为请求找到另一个处理程序,因为看起来我正在请求“.com”文件扩展名。但这只是我的假设。

以前有没有人经历过这种情况,如果有,您是如何解决的?

【问题讨论】:

    标签: iis asp.net-web-api asp.net-mvc-routing


    【解决方案1】:

    在 Web.config 中的 <system.webServer> 下添加 <modules runAllManagedModulesForAllRequests ="true"/>

    【讨论】:

    • 只是为了补充这个答案,问题是当 IIS 看到 a.com 时,它认为您正在尝试访问静态文件,因此不会将请求分派到 ASP.NET 管道.通过添加 Badri 建议的行,您可以覆盖此行为。
    • 很好地补充了答案,因为它只包含如何部分而不是为什么部分。谢谢。
    【解决方案2】:

    我认为您需要在将 url 传输到服务器之前对其进行编码。有一个javascript函数urlencode。你可以检查一下。

    【讨论】:

    • 对 fqdn 进行编码的 URL 没有帮助,因为使用函数 encodeURIComponent() 编码的“www.google.com” url 是“www.google.com”