ASP.NET突然想要一个尾随斜杠

ASP.NET突然想要一个尾随斜杠,asp.net,url,routing,iis-10,Asp.net,Url,Routing,Iis 10,在ASP.NET应用程序中,我们有很多(比如几十个)控制器类,如下所示: [RoutePrefix("some/thing/1.0")] public class SomeController : ApiController { [HttpGet] [Route("")] public string GetInfo() { return "hello world"; } [HttpPut] [Route("")]

在ASP.NET应用程序中,我们有很多(比如几十个)控制器类,如下所示:

[RoutePrefix("some/thing/1.0")]
public class SomeController : ApiController
{
    [HttpGet]
    [Route("")]
    public string GetInfo()
    {
        return "hello world";
    }

    [HttpPut]
    [Route("")]
    public void StoreInfo(string info)
    {
        // ...
    }
}
这几周来一直运作良好,没有任何问题。我们可以按如下方式调用这些端点:

GET https://myWebApp/client/some/thing/1.0
现在,随着昨天的夜间构建,这已经停止工作。突然之间,我们只能用一个尾随斜杠访问这些URL,即

GET https://myWebApp/client/some/thing/1.0/
这也适用于参数化查询:

GET https://myWebApp/client/some/thing/1.0?x=42
不再工作了,但是

GET https://myWebApp/client/some/thing/1.0/?x=42
是的

由于上一个工作构建仅在一天前,我扫描了源代码管理的提交历史,并将构建包并排进行了比较。我找不到任何似乎与这个问题有关的变化

此外,这肯定与我们的应用程序中的某些更改有关:我可以在将二进制文件更新到昨天构建的二进制文件之后,在应用程序的本地副本上重现该问题。(请注意,今天上午已经创建了另一个构建,问题仍然存在。因此,并不是昨天的构建在某种程度上被破坏了;任何已更改的内容似乎都是永久性的。)

有什么可以改变的?我还能去哪里寻找呢?

或者,更主动地问:


在哪里可以更改此行为?

我们已经找到了错误开始出现的具体原因:

MapSignalR
的调用已被注释掉,没有它,应用程序配置文件中某个地方隐藏的一个旧得多、可能是错误的设置变为活动状态: 一个
TransferRequestHandler
,其路径被指定为
*。
,而不仅仅是
*

据推测,signer在初始化后会以某种方式覆盖该设置,因此在过去几年中,该问题从未出现过

因此,明确地说:
Web.config
文件包含以下行:

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>

您可以尝试在RouteCollection类中设置AppendTrailingSlash值。请参考此链接:,
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>