Пустая ссылка исключение в foreach (строка var в Request.QueryString) - PullRequest
0 голосов
/ 17 октября 2011

Я пытался найти решение для этого вопроса, но безуспешно ... Я пытался удалить .ToString () из Request.QueryString [var] и добавить элемент управления if в начале, как этот

if Request.QueryString.HasKeys()) {
  foreach (string var in Request.QueryString)
        {.........
           .............
}

но ничего ....

Полный код

        string[] array_split_item = new string[] {"<script", "</script>", "‘", "’" };
        int pos = 0;
        string strReq = "";
        foreach (string var in Request.QueryString)
        {
            foreach (string strItem in array_split_item)
            {
                strReq = Request.QueryString[var].ToString();
                pos = strReq.ToLower().IndexOf(strItem.ToLower()) + 1;
                if (pos > 0)
                {
                    Response.Write("Some Text");
                    Response.End();
                }
            }
        }

Почему это исключение?

Спасибо

Ответы [ 4 ]

1 голос
/ 17 октября 2011

вы не можете использовать foreach через Request.QueryString таким образом.

Попробуйте это (не проверено)

foreach (string KEY in Request.QueryString.Keys)
{

string value = Request.QueryString[KEY]; //already a string by design, no need to ToString() it

// ... use value for whatever you need

}

EDIT: Visual Studio 2008 строит это хорошо (вставил в метод page_load на странице ASPX, чтобы попробовать); Visual Studio 2010 с пакетом обновления 1 (SP1) не жалуется на скорое строительство.

string[] array_split_item = new string[] { "<script", "</script>", "‘", "’" };
int pos = 0;
string strReq = "";
foreach (string var in Request.QueryString.Keys)
{
    foreach (string strItem in array_split_item)
    {
        strReq = Request.QueryString[var].ToString();
        pos = strReq.ToLower().IndexOf(strItem.ToLower()) + 1;
        if (pos > 0)
        {
            Response.Write("Some Text");
            Response.End();
        }
    }
}

Должно быть, где-то в коде что-то не так, я думаю.

0 голосов
/ 17 октября 2011

Вы должны использовать Request.QueryString.Keys для цикла в QueryString:

foreach (string key in Request.QueryString.Keys)
{
    string value = Request.QueryString[key];
    if (!String.IsNullOrEmpty(value))
    {
        //do work
    }
}
0 голосов
/ 17 октября 2011

Вы называете свою строку var, которая также является типом. Замените var другим именем.

foreach (string text in Request.QueryString.Keys)
.....
strReq = Request.QueryString[text].ToString();
0 голосов
/ 17 октября 2011

Я полагаю, это может быть потому, что вы используете значение ключа в QueryString для доступа к значению.Попробуйте изменить строку strReq = Request.QueryString[var].ToString(); на

strReq = var.ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...