如何查询当前URL以查看它是否包含某个字符串

时间:2011-12-22 16:20:14

标签: vb.net

我想要做的是获取地址栏的全部内容,看看站点路径后面的所有内容(即问号后面的所有内容)是否包含某个字符串,如果是,则返回使用该站点的路径URL和该字符串。

使事情易于理解的示例和一些代码:

如果我在www.example.com/?blah=image,我希望代码查找字符串image(在问号后面以防止名称中带有图片的网站搞砸了)以及是否存在返回www.example.com/images/(当前域名被查找而不是手动编写,因为这将在多个站点上使用)

以下是我到目前为止所写的内容。

Public ReadOnly Property StorageRoot() As String
    Get
        Dim currentabsolute As String = System.Web.HttpContext.Current.Request.Url.AbsolutePath
        Dim currentdomain As String = CurrentDomain
        If currentabsolute.Contains("Media") Then
            Return System.AppDomain.CurrentDomain.BaseDirectory & "\media\"
        ElseIf currentabsolute.Contains("Docs") Then
            Return System.AppDomain.CurrentDomain.BaseDirectory & "\docs\"
        ElseIf currentabsolute.Contains("Image") Then
            Return System.AppDomain.CurrentDomain.BaseDirectory & "\images\"
        End If
    End Get
End Property

我知道CurrentDomain不会返回任何内容,System.Web.HttpContext.Current.Request.Url.AbsolutePath似乎无法返回我想要的内容,因此这些是我希望得到帮助的一部分。

任何帮助都将不胜感激,如果您需要进一步澄清,请询问。

编辑:更新代码

2 个答案:

答案 0 :(得分:3)

您正在寻找Request.QueryString会员。要读取特定查询字符串参数的值,请尝试以下行:

If Request.QueryString("Media") IsNot Nothing Then
    Return currentdomain + "/media/"
ElseIf ...

如果查询字符串不包含相关密钥,则访问该索引将不返回任何内容;否则它将返回该参数的值。例如,您可以测试该字符串是否构造为?Media=MyMedia If Request.QueryString("Media") = "MyMedia"

如果您想要原始查询字符串本身,您可以解析问号后面的所有内容的Request.RawUrl成员,例如:

Dim queryString As String = Request.RawUrl.SubString(Request.RawUrl.IndexOf("?"c) + 1)

答案 1 :(得分:1)

试试这个,让我知道它是如何为你做的:

Imports System.Web

...

Public ReadOnly Property StorageRoot() As String 
    Get
        Dim requestUrl As Uri = HttpContext.Current.Request.Url
        Dim newUrl As New UriBuilder(requestUrl.Scheme, requestUrl.Host, requestUrl.Port, HttpContext.Current.Request.ApplicationPath)
        Dim currentQuery As String = requestUrl.Query 

        If String.IsNullOrEmpty(currentQuery)
            ' What to do if there is no query string?
        Else If currentQuery.Contains("Media", StringComparer.InvariantCultureIgnoreCase) Then 
            newUrl.Path = newUrl.Path + "/media/" 
        ElseIf currentQuery.Contains("Docs", StringComparer.InvariantCultureIgnoreCase) Then 
            newUrl.Path = newUrl.Path + "/docs/" 
        ElseIf currentQuery.Contains("Image", StringComparer.InvariantCultureIgnoreCase) Then 
            newUrl.Path = newUrl.Path + "/images/" 
        End If 

        Return newUrl.ToString()
    End Get 
End Property