我有一个正在部署到 Azure 的 ASP.NET Core 应用程序,该应用程序在 URL 中接收包含冒号(时间戳)的字符串。
例如:http://localhost:5000/Servers/208.100.45.135/28000/2017-03-15T07:03:43+00:00
, or http://localhost:5000/Servers/208.100.45.135/28000/2017-03-15T07%3a03%3a43%2B00%3a00
URL 编码。
使用 Kestrel 在本地运行时效果非常好(dotnet run
),但部署到 Azure 后我收到此错误:The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
快速搜索发现,这是由于 URL 中使用了无效字符(即冒号)造成的。传统的修复方法是将此部分添加到web.config
:
<system.web>
<httpRuntime requestPathInvalidCharacters="" />
</system.web>
但是,将其添加到 Azure 上的 web.config 后,我发现没有任何变化。我想这是由于 ASP.NET Core 托管模型的差异造成的。
这是我目前的web.config
:
<configuration>
<system.web>
<httpRuntime requestPathInvalidCharacters=""/>
<pages validateRequest="false" />
</system.web>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\Server.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
</system.webServer>
</configuration>
以及相关的控制器头...
[HttpGet]
[Route("{serverIpAddress}/{serverPort}/{approxMatchStartTimeStr}")]
public IActionResult GetMatchEvents(string serverIpAddress, string serverPort, DateTimeOffset approxMatchStartTimeStr)
{
...
}
如何让 IIS/Azure 允许 URL 中使用冒号字符?