ASP.NET突然想要一个尾随斜杠
在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("")]
[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"/>