~升级到ASP.NET 4后,路径的解析方式有所不同

~升级到ASP.NET 4后,路径的解析方式有所不同,.net,asp.net,ajax,webforms,asp.net-4.0,.net,Asp.net,Ajax,Webforms,Asp.net 4.0,我们正在将一个大型系统升级到ASP.NET 4,我们发现了一个奇怪的问题,即对于一些Ajax请求,以~开头的路径的解决方式。我们的Ajax请求使用Server.Execute,它们执行的页面具有以~开头的路径。然而,在ASP.NET 4中,似乎此路径的解析不正确,将“MyService.aspx/MyMethod”视为MyService.aspx是一个文件夹。这与ASP.NET 3.5不同 我创建了一个小样本来说明这个问题 我设法在一个小样本中重现了这个问题: ~/Default.aspx 如果

我们正在将一个大型系统升级到ASP.NET 4,我们发现了一个奇怪的问题,即对于一些Ajax请求,以
~
开头的路径的解决方式。我们的Ajax请求使用Server.Execute,它们执行的页面具有以~开头的路径。然而,在ASP.NET 4中,似乎此路径的解析不正确,将“MyService.aspx/MyMethod”视为MyService.aspx是一个文件夹。这与ASP.NET 3.5不同

我创建了一个小样本来说明这个问题

我设法在一个小样本中重现了这个问题:

~/Default.aspx 如果在ASP.NET 3.5和ASP.NET 4上运行相同的代码,将获得不同的输出:

3.5
---------------------------
VirtualPathUtility.ToAbsolute("~/Images/Blah.png"): /MyTest1/Images/Blah.png
VirtualPathUtility.ToAppRelative("~/Images/Blah.png"): ~/Images/Blah.png
new Image().ResolveClientUrl("~/Images/Blah.png"): Images/Blah.png

4.0
---------------------------
VirtualPathUtility.ToAbsolute("~/Images/Blah.png"): /MyTest1/Images/Blah.png
VirtualPathUtility.ToAppRelative("~/Images/Blah.png"): ~/Images/Blah.png
new Image().ResolveClientUrl("~/Images/Blah.png"): ../Images/Blah.png
前两个调用相同,但
ResolveClientUrl
调用的行为不同。注意:我们实际上并不是像这样调用
ResolveClientUrl
,而是在一个名为
服务器的ASPX页面中。执行
'd,我这样做只是为了保持样本的小规模-问题似乎是一样的

所以。。。这是虫子吗?有没有什么方法可以使这项工作与ASP.NET 4中的工作相同,以避免必须移动对象以使路径正常工作?

与ASP.NET 4.0中的类似,以便正确返回路径,以便浏览器能够解释它们,例如

/MyFolder/MyPage.aspx/Something/Something
在ASP.NET中,URL可能不正确,因为它们基于
/MyFolder/MyPage.aspx

我不认为ASP.NET3.5的行为真的是正确的,它只是我们使用的,因为它就是这样的,所以它现在被破坏了

我现在的解决方案是将asmx文件向上移动一个级别,这样它们就比其内容写入的页面高出一个级别。这是一个复杂的问题,只有当你的页面在文件夹中时才有效,但这比重写它的工作原理要容易得多

与ASP.NET 4.0中的类似,因此正确返回路径,以便浏览器能够解释它们,例如

/MyFolder/MyPage.aspx/Something/Something
在ASP.NET中,URL可能不正确,因为它们基于
/MyFolder/MyPage.aspx

我不认为ASP.NET3.5的行为真的是正确的,它只是我们使用的,因为它就是这样的,所以它现在被破坏了


我现在的解决方案是将asmx文件向上移动一个级别,这样它们就比其内容写入的页面高出一个级别。这是一个复杂的问题,只有当你的页面在文件夹中时才有效,但这比重写它的工作原理要容易得多

更多信息可以在我的第一行链接到的文章中找到;-)我们最终移动了我们的服务(幸运的是,所有调用它们的文件都在一个子文件夹中,否则这将不起作用)。可能不应该是这样的兼容性切换:-(更多信息可以在我的第一行链接的文章中找到;-)我们最终移动了我们的服务(幸运的是,所有调用它们的文件都在一个子文件夹中,否则这将不起作用)。可能不应该成为此的兼容性开关:-(
/MyFolder/MyPage.aspx/Something/Something