ASP.NET表单应用程序破坏了自定义URI数据

时间:2014-03-18 14:03:34

标签: asp.net .net iis .net-4.5 episerver

我们有一个现有的CMS实现,episerver 7.1,它有一个.NET 4.0应用程序池,是针对.NET 4.0构建的。

此CMS基于表单,并且已禁用请求身份验证。我们有一个具有URL属性的自定义页面类型,我们有时会在此URL属性中使用自定义URI方案来动态查找后面代码中的目录链接,mpc://16403其中16403 us是产品的唯一ID不是市场特定的。 [这允许客户端添加链接一次,然后系统查找正确的市场特定链接]

我们遇到了计算机上的服务问题,并且必须安装.NET 4.5。 突然,我们发现自定义链接已损坏,将mpc://16403更改为mpc://0.0.64.19/

出于某种原因,在安装.NET 4.5之后,我们的自定义URL将转换为IP地址。没有任何配置发生变化,只安装了.NET 4.5。

有谁知道为什么会这样,以及我们如何阻止它发生?

2 个答案:

答案 0 :(得分:3)

我敢打赌,在幕后,正在使用System.Uri。如果查看类引用,您将看到该类解析传入的字符串以将其分解为其组件部分(方案,主机等)。在这种情况下,看起来解析逻辑被修改为假设由数字组成的主机名是IP地址。至于如何最好地处理这个问题,看起来你可能想要使用字符串(可能是一个坏主意)或custom protocol handler

答案 1 :(得分:2)

好的,.NET 4.5如何处理System.Uri类似乎存在一个错误。

具体而言,它总是将IPAddress.Parse应用于主机,即使该方案未知。这是错误的,因为并非所有“主机”都是IP地址。

以下代码段在.NET 4.5中生成mpc 00.00.64.19但在.NET 4.0和.NET 4.5.1中生成正确的mpc 16403

System.Uri myUri = new System.Uri("mpc://16403"); 
Console.WriteLine(myUri.Scheme + " " + myUri.Host);

因此,如果您想将自定义方案与从System.Uri派生的任何类/特性一起使用,请不要使用.NET 4.5并直接使用.NET 4.5.1