2011-12-22 2 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は私がそれらを探しています何を返していないようです知っているが私は助けを得るために期待しています何の一部です。

ご迷惑をおかけして申し訳ありません。

編集:あなたはRequest.QueryStringメンバーを探している更新されたコード

+1

このコードは、ページコードビヘイビア、HttpHanlder、またはMVCで実行されますか?また、この記事(http://www.west-wind.com/weblog/posts/2009/Dec/21/Making-Sense-of-ASPNET-Paths)が役に立ちます。 – JamieSee

+0

はい、それはコードビハインドとihttphandlerで実行されます – dudledok

答えて

2

。クエリ文字列が何も返さないだろうそのインデックスにアクセスし、該当のキーが含まれていない場合

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

'Request.'anythingを使用すると、'要求が宣言されていません。それは保護レベルのためにアクセスできない可能性があります ' – dudledok

+0

' Request'は 'Page'クラスのプロパティとしてのみ利用できます。そうでなければ、あなたのハンドラメソッドで利用可能な' HttpContext'の 'Request'プロパティを調べる必要がありますまたは 'HttpContext.Current.Request'を使用してください。 – lsuarez

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

関連する問題