10

Cookie に値が存在するかどうかを確認する必要があります。ifしかし、3つのCookieをチェックする必要がある場合、またはでチェックするのは悪いように思われるので、そうするための迅速で良い方法があるかどうか疑問に思いtryます。

Cookie が存在しない場合、空の文字列が変数に割り当てられないのはなぜですか? 代わりにそれは示していますObject reference not set to an instance of an object.

私のコード(動作しますが、このタスクには大きすぎるようです。これを行うためのより良い方法があるはずです)

// First I need to asign empty variables and I don't like this
string randomHash = string.Empty;
string browserHash = string.Empty;
int userID = 0;

// Second I need to add this huge block of try/catch just to get cookies
// It's fine since I need all three values in this example so if one fails all fails
try
{
    randomHash = Convert.ToString(Request.Cookies["randomHash"].Value);
    browserHash = Convert.ToString(Request.Cookies["browserHash"].Value);
    userID = Convert.ToInt32(Request.Cookies["userID"].Value);
}
catch
{
    // And of course there is nothing to catch here
}

ご覧のとおり、私はクッキーを取得するためだけにこの巨大なブロックを持っています。私が欲しいのは次のようなものです:

// Gives value on success, null on cookie that is not found
string randomHash = Convert.ToString(Request.Cookies["randomHash"].Value);
string browserHash = Convert.ToString(Request.Cookies["browserHash"].Value);
int userID = Convert.ToInt32(Request.Cookies["userID"].Value);

.Value編集多分私はどうにかして私の好みに合わせてメソッドをオーバーライドできますか?

4

1 に答える 1

13

Cookie が null かどうかを確認するだけです。

if(Request.Cookies["randomHash"] != null)
{
   //do something
}

注: これを行う "より良い" 方法は、読み取り可能で信頼性の高い優れたコードを作成することです。これは C# の動作ではないため、空の文字列を割り当てません。オブジェクト ( ) のValueプロパティを呼び出そうとしています。使用するものが何もないため、null オブジェクトは使用できません。nullHttpCookie

に変換してintも解析エラーを回避する必要がありますが、この組み込みメソッドを使用できます。

int.TryParse(cookieString, out userID);

これは別のポイントをもたらしますか?ユーザーIDをCookieに保存するのはなぜですか? これはエンド ユーザーが変更できます。これをどのように使用する予定かはわかりませんが、これが大きなセキュリティ ホールであると想定するのは正しいでしょうか?


または小さなヘルパー関数を使用:

public string GetCookieValueOrDefault(string cookieName)
{
   HttpCookie cookie = Request.Cookies[cookieName];
   if(cookie == null)
   {
      return "";
   }  
   return cookie.Value;
}

それから...

string randomHash = GetCookieValueOrDefault("randomHash");

または拡張メソッドを使用:

public static string GetValueOrDefault(this HttpCookie cookie)
{
   if(cookie == null)
   {
      return "";
   }  
   return cookie.Value;  
}

それから...

string randomHash = Request.Cookies["randomHash"].GetValueOrDefault();
于 2012-08-24T12:57:50.610 に答える