【问题标题】:ASP.NET suddenly wants a trailing slashASP.NET 突然想要一个斜杠
【发布时间】:2020-06-22 10:30:48
【问题描述】:

在 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

会。

由于上一个工作构建仅在一天前,我已经扫描了我们的源代码管理的提交历史,并并排比较了构建包。我找不到任何似乎与此问题相关的更改。

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

可能会发生什么变化,我还能去哪里寻找呢?

或者,更主动地询问:

我在哪里可以改变这种行为?

【问题讨论】:

  • 您可以尝试在 RouteCollection 类中设置 AppendTrailingSlash 值。请参考此链接:link1, link2

标签: asp.net url routing iis-10


【解决方案1】:

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

MapSignalR 的调用已被注释掉,如果没有它,隐藏在应用程序配置文件某处的一个更老的、可能是错误的设置会变为活动状态: 一个TransferRequestHandler,其路径被指定为*.,而不仅仅是*

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

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

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

这不得不改成

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

让这里描述的问题消失。

(不幸的是,这个解决方案导致another problem。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多