C# C URL处理是否允许单独的站点或虚拟目录?

C# C URL处理是否允许单独的站点或虚拟目录?,c#,C#,我有一个问题更多的是为了我自己的学习经验,因为我已经找到了一个解决方案,或者更具体地说是两个 问题是,我有一个与应用程序连接的web服务,但可以通过不同的方式部署web服务,即IIS虚拟目录或单独的站点。显然,这些将对URL产生影响。在本例中,URL从安装应用程序的任何位置的配置文件中提取,因此应用程序必须能够处理从那里提取的任何内容 我在控制台示例中编写了一个快速块。第一种方法不适用于出现问题的虚拟目录。其他两个方法返回正确的结果,我只是好奇,是否有理由不使用LastIndexOf简单地替换字

我有一个问题更多的是为了我自己的学习经验,因为我已经找到了一个解决方案,或者更具体地说是两个

问题是,我有一个与应用程序连接的web服务,但可以通过不同的方式部署web服务,即IIS虚拟目录或单独的站点。显然,这些将对URL产生影响。在本例中,URL从安装应用程序的任何位置的配置文件中提取,因此应用程序必须能够处理从那里提取的任何内容

我在控制台示例中编写了一个快速块。第一种方法不适用于出现问题的虚拟目录。其他两个方法返回正确的结果,我只是好奇,是否有理由不使用LastIndexOf简单地替换字符串,或者是否有其他解决方案

Uri SiteNameUrl = new Uri("http://SiteName.test.com/PackageDlService.aspx");
Console.WriteLine(String.Format("URL Scenario 1: {0}",SiteNameUrl));

String path = SiteNameUrl.GetLeftPart(UriPartial.Authority);
String uriStr = String.Format(@"{0}/SiteName/Packages/{1}/CurrentPackage.zip", path, "1.0");
Console.WriteLine(String.Format("URL Method 1 (Broken): {0}", uriStr));

path = SiteNameUrl.ToString().Replace("/PackageDlService.aspx","");
uriStr = String.Format(@"{0}/Packages/{1}/CurrentPackage.zip", path, "1.0");
Console.WriteLine(String.Format("URL Method 2: {0}", uriStr));

path = SiteNameUrl.ToString().Substring(0, SiteNameUrl.ToString().LastIndexOfAny(new char[] { '/', '\\' }) + 1);
uriStr = String.Format(@"{0}Packages/{1}/CurrentPackage.zip", path, "1.0");
Console.WriteLine(String.Format("URL Method 3: {0}", uriStr));

Console.WriteLine(); // add a line break between examples

Uri SiteNameUrl1 = new Uri("http://www.test.com/SiteName/PackageDlService.aspx");
Console.WriteLine(String.Format("URL Scenario 2: {0}", SiteNameUrl1));

String path1 = SiteNameUrl1.GetLeftPart(UriPartial.Authority);
String uriStr1 = String.Format(@"{0}/SiteName/Packages/{1}/CurrentPackage.zip", path1, "1.0");
Console.WriteLine(String.Format("URL Method 1 (Broken): {0}", uriStr1));

path1 = SiteNameUrl1.ToString().Replace("/PackageDlService.aspx","");
uriStr1 = String.Format(@"{0}/Packages/{1}/CurrentPackage.zip", path1, "1.0");
Console.WriteLine(String.Format("URL Method 2: {0}", uriStr1));

path1 = SiteNameUrl1.ToString().Substring(0, SiteNameUrl1.ToString().LastIndexOfAny(new char[] { '/', '\\' }) + 1);
uriStr1 = String.Format(@"{0}Packages/{1}/CurrentPackage.zip", path1, "1.0");
Console.WriteLine(String.Format("URL Method 3: {0}", uriStr1));

我不清楚你为什么需要这个。只需配置完整的URI。更简单的说,应用程序中有大量其他区域在调用不同页面时执行类似的操作。更改全局设置需要将它们全部修复。我同意这将是更好的解决方案,但需要更多的工作和广泛的测试,这不是我的要求