2011-11-30 71 views
2

我通過與查詢字符串數組來設置這些變量: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"]; 

查詢字符串有些按鍵可能會拋出空例外。

我不想要包裝的嘗試捕捉每一個變種,我不想嘗試捕捉到包裝所有,因爲如果第一個失敗,整個將爲空/避免。

我怎樣才能安全地訪問這些變量?

+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"])) 
      { 
      } 

可以解決這個問題.. 或;

寫擴展功能來檢查對象爲空或不和使用它像

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

,並給該函數返回值,在這個例子中的「」和空字符串..

6

我會用空凝聚運營商,使其很好的和簡單的

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

您可以在MSDN閱讀更多有關操作。

1

建議:

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();