проблема asp.net с нулевым cookie - PullRequest
0 голосов
/ 25 ноября 2010

У меня проблемы с написанием оператора If, потому что он запрашивает значение cookie, но возможно, что cookie может быть нулевым, что разрушает страницу.

Вот код:

If Request.Cookies("myCookie").Value = "1234" then
'do stuff
End If

Мне кажется, мне нужен элегантный способ сказать: «Если myCookie не имеет значение null и имеет значение ...»

У кого-нибудь есть мысли?

РЕДАКТИРОВАТЬ:

Ладно, все заработало, но так как будет много «если» и «если», то мне интересно, есть ли лучший способ сделать это ...

If not Request.Cookies("myCookie") is nothing and Request.Cookies("myCookie").Value = "1234" then
    'do this
Else If not Request.Cookies("myCookie") is nothing and Request.Cookies("myCookie").Value = "5678" then
    'do that
Else
    'do something else
End If

ОК ..спасибо за все ответы ... не уверен, что будет лучшим подходом, но я попробую их все и приму лучшее в качестве ответа.

Я также собираюсь добавить еще один уровень сложностина вопрос:

   If Not Request.Cookies("myCookie") is Nothing Then
        Select Case Request.Cookies("myCookie").Value
                Case "EZ12"
                theNumber = "0800 111 1111"
Case "ER34"
                theNumber = "0800 333 3333"
Case "RE32"
                theNumber = "0800 444 4444"
                Case Else
                    theNumber = "0800 222 2222"
        End Select
    Else
        Select Case Request.Cookies("myCookie2").Value
                Case "EZ12"
                theNumber = "0800 111 1111"
Case "ER34"
                theNumber = "0800 333 3333"
Case "RE32"
                theNumber = "0800 444 4444"
                Case Else
                    theNumber = "0800 222 2222"
        End Select
    End If

В основном, случаи всегда будут одинаковыми, но он будет выбирать случай в одном из 2 мест в зависимости от того, имеет ли myCookie значение.

Посколькуможет быть довольно много случаев, там в любом случае я могу сойти с рук толькоперечисляя их один раз .?

Ответы [ 6 ]

2 голосов
/ 25 ноября 2010

отвечает на второй вопрос редактирования ...

' pseudo code
If Not Request.Cookies("mycookie") is Nothing THen

   Select Case Request.Cookies("mycookie").Value
    Case "1234"

    Case "5678"

    Case Else
        '?

   End Select

End If

'второй вопрос снова

Dim theNumber as String = "0800 222 2222"
If Not Request.Cookies("mycookie") is Nothing AndAlso Request.Cookies("mycookie").Value = "EZ12" Then
    theNumber = "0800 111 1111"
ElseIf Not Request.Cookies("mycookie2") is Nothing AndAlso Request.Cookies("mycookie2").Value = "EZ12" Then
    theNumber = "0800 111 1111"
End If
1 голос
/ 25 ноября 2010

Вы можете сделать это так:

If Request.Cookies["myCookie"] IsNot Nothing 
   And Request.Cookies["myCookie"].Value = "1234" Then ...

РЕДАКТИРОВАТЬ: Решение второго вопроса:

var value = If(Request.Cookies("myCookie") IsNot Nothing, Request.Cookies("myCookie").Value & "", String.Empty);  
Select Case value
...
End Select
1 голос
/ 25 ноября 2010

Просто сделайте это так же, как и любую другую проверку на нуль:

If Not Request.Cookies("myCookie") Is Nothing Then
   // read value
End If

Если вы делаете это часто, вам может потребоваться создать обертку для файлов cookie HTTP, где в получателе встроена проверка на нуль.

0 голосов
/ 19 февраля 2014

0не один из способов сделать это

If ((Request.Cookies("myCookie") IsNot Nothing) AndAlso (Request.Cookies("myCookie").Value = "1234")) Then
    'Do Stuff
End If
0 голосов
/ 25 ноября 2010

Один из способов сделать это -

If ((Request.Cookies("myCookie") IsNot Nothing) AndAlso (Request.Cookies("myCookie").Value = "1234")) Then
    'Do Stuff
End If

Основным отличием от вышеперечисленного является использование AndAlso, оно работает, оценивая первую часть x IsNot Nothing, и если это ложно, тогда if не будет(поскольку что-либо после этого всегда вызовет сбой).Только если 1-й раздел верен, он попытается оценить второй.

Это дает возможность ничего не проверять, а также незначительное повышение производительности, поскольку при необходимости будут оцениваться только другие параметры.

Or версия - OrElse, это прекратит оценку, если 1-й раздел этого равен true, поскольку в этом случае он всегда будет возвращать true.

Другой способ немного грязный, но вы можете использовать.Net встроенная функция if внутри оператора if

If (If(Request.Cookies("myCookie"), "") = "1234") Then
    'Do Something
End If

Встроенный оператор if с двумя операторами проверяет первое и, если ничего не возвращает, возвращает второе (в данном случае пустую строку).Если первый элемент не является ничем, он возвращает его.

Надеюсь, что эти решения помогут

0 голосов
/ 25 ноября 2010

Компоненты оператора if будут проверяться слева направо.Поэтому, если вы проверите, что cookie существует, а затем проверите его значение, вы будете в порядке, как если бы cookie не существовал, он провалит первую проверку и вторая часть не будет обработана:

...