以%20结尾的网址出现问题

时间:2009-07-14 17:07:26

标签: asp.net iis redirect

我有一个大问题。现场有设备发送URL“/ updates”。这是这些设备开发人员的错字。在服务器日志中,它看起来像“/ updates +”。

我有一个ManageURL重写模块,可以处理所有没有扩展名的请求。但是这个请求会导致HttpException:

System.Web.HttpException:

System.Web.HttpException
   at System.Web.Util.FileUtil.CheckSuspiciousPhysicalPath(String physicalPath)
   at System.Web.HttpContext.ValidatePath()
   at System.Web.HttpApplication.ValidatePathExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

正如我在日志中看到的,URL重写模块甚至没有获取此URL,因此我无法在那里修复它。

有没有办法用ASP.NET处理这些URL?

4 个答案:

答案 0 :(得分:20)

好的,这是一个旧线程,但我想添加适用于所有ASP.NET版本的可行解决方案。看看this answer in a related thread。它基本上归结为注册PreSendRequestHeaders中的事件global.asax.cs

或者,在ASP.NET 4.0或更高版本上,在web.config中使用<httpRuntime relaxedUrlToFileSystemMapping="true" />

答案 1 :(得分:1)

根据some,这是System.Web.dll

internal static void CheckSuspiciousPhysicalPath(string physicalPath)
{
  if (((physicalPath != null) && (physicalPath.Length > 0))
    && (Path.GetFullPath(physicalPath) != physicalPath))
  {
    throw new HttpException(0x194, "");
  }
}

我猜你不能改变它,但是不能在IIS设置中禁用它吗?当然,这也会禁用所有其他检查......: - (

或者编写一些在上述代码之前运行的ISAPI过滤器?根据{{​​3}},编写自己的模块很容易。

或者,Handle URI hacking gracefully in ASP.NET。在此页面中(如上面的URI黑客链接中所建议的)搜索exception.TargetSite.Name中的特定文字,例如CheckSuspiciousPhysicalPath,如果找到(或只是总是),请查看create your own error page或类似的内容,清除错误并重定向到修复过的URL?

答案 2 :(得分:1)

您可以运行网址重写ISAPI,例如IIRF

答案 3 :(得分:0)

如果您有权访问代码,为什么不在最后检查“+”并将其删除?