我有一个ASP.NET Core应用程序,我正在部署到Azure,它在URL中包含一个包含冒号(时间戳)的字符串。
例如:http://localhost:5000/Servers/208.100.45.135/28000/2017-03-15T07:03:43+00:00
或http://localhost:5000/Servers/208.100.45.135/28000/2017-03-15T07%3a03%3a43%2B00%3a00
网址编码。
使用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中的冒号?
答案 0 :(得分:4)
您遇到的问题与路径中的冒号(:)无关,它实际上是plus (+) that IIS doesn't like。如果将加号编码为&#34; +&#34;则无关紧要。或&#34;%2B&#34;。您有两种选择:
示例web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
<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>
当前web.config的system.web部分与ASP.NET Core无关。