2011-12-22 66 views
0

我想要做的是将地址栏的全部内容查看站点路径后的所有内容(即问号后面的所有内容)是否包含某些字符串,如果确实如此,则使用网站URL和该字符串返回路径。如何查询当前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似乎并没有返回我所期待的所以这些都是我所希望获得帮助的一部分。

任何帮助将不胜感激,如果您需要任何更多的澄清只是问。

编辑:更新的代码

+1

此代码是否会在页面代码隐藏,HttpHanlder或MVC下运行?另外,本文(http://www.west-wind.com/weblog/posts/2009/Dec/21/Making-Sense-of-ASPNET-Paths)可能会有所帮助。 – JamieSee 2011-12-22 17:17:42

+0

是的,它运行在一个代码隐藏和一个ihttphandler – dudledok 2011-12-22 17:26:33

回答

2

您正在寻找的Request.QueryString成员。要阅读特定的查询字符串参数的值,尝试沿着线的东西:

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

如果查询字符串不包含在问题的关键,访问该指数将返回任何结果;否则它将返回该参数的值。例如,您可以测试以查看该字符串是否构造为?Media=MyMediaIf Request.QueryString("Media") = "MyMedia"

如果你想在原始查询字符串本身,你可以解析Request.RawUrl成员问号之后的所有的东西,如:

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

使用'Request.'anything给我错误'请求未声明。由于其保护级别,可能无法访问' – dudledok 2011-12-22 17:28:34

+0

'Request'只能作为'Page'类的属性提供,否则您需要检查可用于您的处理程序方法的'HttpContext'的Request属性或者使用'HttpContext.Current.Request'。 – lsuarez 2011-12-22 17:44:01

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 
+0

在创建newUrl之前它不工作。我知道这一点,因为如果我手动放入返回的路径它仍然无法正常工作。返回currentQuery以查看它是否应该工作的最佳方法是什么? – dudledok 2011-12-23 09:50:43

相关问题