URL段中的句点导致404错误

时间:2016-06-03 18:40:43

标签: asp.net-mvc vb.net iis-express

我有自定义路线:

<Route("maintenance/test/{one}/{two}/{three}")>
Function Test(ByVal one As String, ByVal two As String, ByVal three As String) As JsonResult
    Return Json(True, JsonRequestBehavior.AllowGet)
End Function

当我点击路线时,它按预期工作:

  

本地主机:1337 /维护/诊断/ 1/2/3

但是,如果任何参数包含句点,例如:

  

localhost:1337 / maintenance / test / 1 / 2./ 3 (注意2之后的时间段)

我收到404“资源无法找到”错误。

似乎IIS正在提取URL并尝试提供静态文件,而不是将其传递给MVC。

我尝试过的事情(无济于事):

  • 添加尾部斜杠以强制IIS将其识别为URL而非资源
  • 根据this answerrunAllManagedModulesForAllRequests="true"添加到web.config的<system.webServer><modules>
  • 根据[此答案]添加TransferRequestHandler处理程序:(https://stackoverflow.com/a/12151501/118697
    <add name="ApiURIs-ISAPI-Integrated-4.0" 
         path="/people/*" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" 
         type="System.Web.Handlers.TransferRequestHandler"
         preCondition="integratedMode,runtimeVersionv4.0" />
  • 将MVC 5更新为最新版本(5.2.3)

1 个答案:

答案 0 :(得分:1)

我最初假设IIS将请求视为资源请求是不正确的。

事实证明,ASP.NET阻止对./的URL的任何请求,就像它阻止传统保留字一样。

然后解决方案是启用relaxedUrlToFileSystemMapping

<httpRuntime relaxedUrlToFileSystemMapping="true" />

来源: