C# 如何获取以下字符串的一部分?

C# 如何获取以下字符串的一部分?,c#,asp.net,C#,Asp.net,假设我有一个绝对url/testserver/tools/search.aspx,它存储在一个可变url中 我想检查url==/tools/search.aspx,而不必使用/testserver 一个更完整的例子是: 我的testserver包含url 但是我的live server包含url 如果我将存储testserver url的变量url与liveserver url进行比较,它将失败,这就是为什么我只想检查/tools/Search.aspx部分 if (url.ToLower().

假设我有一个绝对url/testserver/tools/search.aspx,它存储在一个可变url中

我想检查url==/tools/search.aspx,而不必使用/testserver

一个更完整的例子是:

我的testserver包含url

但是我的live server包含url

如果我将存储testserver url的变量url与liveserver url进行比较,它将失败,这就是为什么我只想检查/tools/Search.aspx部分

if (url.ToLower().Contains("/tools/search.aspx"))
{
   //do stuff here
}
如果有查询字符串,我会使用Contains,但如果没有查询字符串,也可以使用EndsWith(“/tools/search.aspx”)

如果您有查询字符串,我会使用Contains,但是如果您没有查询字符串,也可以使用EndsWith(“/tools/search.aspx”)。

您可以使用该属性,它将为您提供相对于应用程序根的路径。所以
”http://host/virtualfolder/page.aspx“
将是
”~/page.aspx“

您可以使用该属性,它将为您提供相对于应用程序根的路径。所以
”http://host/virtualfolder/page.aspx“
将是
”~/page.aspx“


如果您的输入格式为
“http://www.testserver.com/tools/Search.aspx“

两者都会导致
“/tools/Search.aspx”

如果您必须接受任何Uri,即包括带有查询字符串、片段标识符等的Uri,那么使用
Uri
是最佳解决方案



如果您的输入格式为“/testserver.com/tools/Search.aspx”,则您知道所有输入都将始终是此格式且有效,并且不包含任何其他URI组件:

var input = "/testserver.com/tools/Search.aspx";
var path1 = input.Substring(input.Index('/', 1));

如果您的输入格式为
,则结果为
“/tools/Search.aspx”

http://www.testserver.com/tools/Search.aspx“

两者都会导致
“/tools/Search.aspx”

如果您必须接受任何Uri,即包括带有查询字符串、片段标识符等的Uri,那么使用
Uri
是最佳解决方案



如果您的输入格式为“/testserver.com/tools/Search.aspx”,则您知道所有输入都将始终是此格式且有效,并且不包含任何其他URI组件:

var input = "/testserver.com/tools/Search.aspx";
var path1 = input.Substring(input.Index('/', 1));
结果是
“/tools/Search.aspx”

如果您从Request.PathInfo获取url,您无论如何都不会拥有该域……但您的问题是不明确的,正如您所说,您在其中有一个路径/testserver/,但在您提供的url中没有

否则,从Request.url.ToString()设置url

如果您从Request.PathInfo获取url,您无论如何都不会拥有该域……但您的问题是不明确的,正如您所说,您在其中有一个路径/testserver/,但在您提供的url中没有


否则,请从Request.url.ToString()设置url

如果唯一的区别是url的主机部分,我将使用该类比较它们的绝对路径(uri的“tools/Search.aspx”部分)

下面是一个如何执行此操作的示例:

static void Main(string[] args)
{
    //load up the uris
    Uri uri = new Uri("http://www.testserver.com/tools/search.aspx");            
    Uri matchingUri = new Uri("http://www.liveserver.com/tools/search.aspx");
    Uri nonMatchingUri = new Uri("http://www.liveserver.com/tools/cart.aspx");

    //demonstrate what happens when the uris match
    if (uri.AbsolutePath == matchingUri.AbsolutePath)
        Console.WriteLine("These match");
    //demonstrate what happens when the uris don't match
    if (uri.AbsolutePath != nonMatchingUri.AbsolutePath)
        Console.WriteLine("These do not match");
}

如果唯一的区别是URL的主机部分,我将使用该类比较它们的绝对路径(uri的“tools/Search.aspx”部分)

下面是一个如何执行此操作的示例:

static void Main(string[] args)
{
    //load up the uris
    Uri uri = new Uri("http://www.testserver.com/tools/search.aspx");            
    Uri matchingUri = new Uri("http://www.liveserver.com/tools/search.aspx");
    Uri nonMatchingUri = new Uri("http://www.liveserver.com/tools/cart.aspx");

    //demonstrate what happens when the uris match
    if (uri.AbsolutePath == matchingUri.AbsolutePath)
        Console.WriteLine("These match");
    //demonstrate what happens when the uris don't match
    if (uri.AbsolutePath != nonMatchingUri.AbsolutePath)
        Console.WriteLine("These do not match");
}

您的URL是
/testserver/tools/search.aspx
还是
http://www.testserver.com/tools/Search.aspx
?当我调试并检查AbsoluteUrl is/testserver/tools/search.aspxIs时,请将您的URL
/testserver/tools/search.aspx
http://www.testserver.com/tools/Search.aspx
?当我调试并检查AbsoluteUrl时/testserver/tools/search.aspx“EndsWith”可能是一个更好的选择。只是好奇,是什么让EndsWith成为一个更好的选择。@Andrew--除非您还希望它匹配…/search.aspx?name=something。如果您确信URL中没有查询参数,则EndsWith会更好。@Xaisoft:我认为(尽管我不确定)str1.EndsWith(str2)例程将查找与str1的最后(str2.Length)字符的直接匹配。str1.Contains(str2)必须搜索所有str1才能找到任何可能的匹配项。例如“/tools/search.aspx.something”(不太可能,但可能)。“EndsWith”可能是一个更好的选择。只是好奇,是什么让EndsWith成为一个更好的选择。@Andrew--除非您也希望它匹配…/search.aspx?name=something。如果您确信URL中没有查询参数,则EndsWith会更好。@Xaisoft:我认为(尽管我不确定)str1.EndsWith(str2)例程将查找与str1的最后(str2.Length)字符的直接匹配。str1.Contains(str2)必须搜索所有str1以找到任何可能的匹配项。例如“/tools/search.aspx.something”(不太可能,但可能)。投票结果是,它相当明智地建议使用核心系统库提供的经过测试的功能。为什么还要做其他事情?如果应用程序部署在服务器上的虚拟文件夹中(如问题中所述),会发生什么情况?投票赞成,因为它相当明智地建议使用核心系统库提供的经过尝试和测试的功能。为什么还要做其他事情?如果应用程序部署在服务器上的虚拟文件夹中(如问题中所述),会发生什么情况?
static void Main(string[] args)
{
    //load up the uris
    Uri uri = new Uri("http://www.testserver.com/tools/search.aspx");            
    Uri matchingUri = new Uri("http://www.liveserver.com/tools/search.aspx");
    Uri nonMatchingUri = new Uri("http://www.liveserver.com/tools/cart.aspx");

    //demonstrate what happens when the uris match
    if (uri.AbsolutePath == matchingUri.AbsolutePath)
        Console.WriteLine("These match");
    //demonstrate what happens when the uris don't match
    if (uri.AbsolutePath != nonMatchingUri.AbsolutePath)
        Console.WriteLine("These do not match");
}