我有一个大问题。现场有设备发送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?
答案 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)
如果您有权访问代码,为什么不在最后检查“+”并将其删除?