2011-11-30 5 views
2

私はのQueryStringアレイと、これらの変数を介して設定する必要があります。クエリ文字列にC#の - ヌル例外なくアクセスアレイ

UtmSource = HttpContext.Current.Request.QueryString["utm_source"]; 
UtmMedium = HttpContext.Current.Request.QueryString["utm_medium"]; 
UtmCreative = HttpContext.Current.Request.QueryString["utm_creative"]; 
UtmCampaign = HttpContext.Current.Request.QueryString["utm_campaign"]; 
UtmTerm = HttpContext.Current.Request.QueryString["utm_term"]; 
UtmContent = HttpContext.Current.Request.QueryString["utm_content"]; 
Tag1 = HttpContext.Current.Request.QueryString["utm_source"]; 
Tag2 = HttpContext.Current.Request.QueryString["m"]; 

一部のキーがnull例外をスローする可能性があります。

私はそれぞれのvarをtry catchでラップしたくありません。最初のものが失敗した場合、全体がnull /回避されるため、try catchですべてをラップしたくありません。

これらの変数にはどうすれば安全にアクセスできますか?

+0

QueryString名で呼び出された関数を追加し、関数内でtry-catchを処理することができます(失敗した場合は戻り値をデフォルトに設定します)。 –

答えて

3

クエリ文字列パラメータの値を安全に取得したい場合は、このようなメソッドを使用するのはどうでしょうか?

public string getQueryStringValueOrEmpty(string key) 
{ 
    string result = HttpContext.Current.Request.QueryString[key]; 

    if(result == null) 
    { 
    result = string.Empty; 
    } 

    return result; 
} 
+0

私の愚かな!おかげでVはあなたにする – SexyMF

0
if (!String.IsNullOrEmpty(HttpContext.Current.Request.QueryString["utm_term"])) 
      { 
      } 

はこれを解決できます。 または。

は、この例では、オブジェクトがnullであるかをチェックし、

HttpContext.Current.Request.QueryString["utm_term"].checkNull(""); 

のようにそれを使用し、その関数に戻り値を与えるために、拡張機能を作成し、その「」と空の文字列..

6

私はそれは素敵にするためにnullで合体演算子を使用し、簡単な

UtmSource = Request.QueryString["utm_source"] ?? "DefaultValue" 

あなたはMSDNのオペレータについての詳細を読むことができます。

1

提案:有効なものが何かに設定されます(それがNULL可能である場合)

UtmSource = (Request.QueryString.ContainsKey("utm_source")) ? Request.QueryString["utm_source"] : null; 

のみ、他の人がnull

1

に設定されます。ここParseQueryStringに建て使用し、代替ですいくつかの忙しい作業をスキップするためのNameValueCollection。私は.IsNullOrEmptyも使用しようとしましたが、私のコンソールアプリケーションはそれを気にしていませんでした。

Uri tempUri = new Uri("http://microsoft.com/Default.aspx?IsMonkeyBusiness=true&Name=Daniel&Test="); 
string sQuery = tempUri.Query; 
NameValueCollection qscoll = HttpUtility.ParseQueryString(sQuery); 
foreach (string s in qscoll) 
    foreach (string v in qscoll.GetValues(s)) 
     if (!(v=="")) Console.WriteLine("{0}",v); 
Console.ReadLine(); 
関連する問題