Получение значения Request.Headers

Это потому, что этот репозиторий не является пакетом. Это отсутствует package.json.

29
задан Rob 20 August 2010 в 23:33
поделиться

6 ответов

if (Request.Headers["XYZComponent"].Count() > 0)

... будет пытаться подсчитать количество символов в возвращаемой строке, но если заголовок не существует, он вернет NULL, поэтому возникает исключение. Ваш второй пример фактически делает то же самое: он будет искать в коллекции заголовков и возвращать NULL, если он не существует, и вы затем пытаетесь подсчитать количество символов:

Используйте это вместо:

if(Request.Headers["XYZComponent"] != null)

Или если вы хотите обрабатывать пустые или пустые строки как не заданные, используйте:

if((Request.Headers["XYZComponent"] ?? "").Trim().Length > 0)

Оператор Null Coalesce ?? вернет пустую строку, если заголовок имеет значение NULL, остановив выдачу исключения NullReferenceException.

Вариант вашей второй попытки также будет работать:

if (Request.Headers.AllKeys.Any(k => string.Equals(k, "XYZComponent")))

Изменить: Извините, я не осознавал, что вы явно проверяли значение true :

bool isSet = Boolean.TryParse(Request.Headers["XYZComponent"], out isSet) && isSet;

Вернет false, если значение заголовка ложно, или если заголовок не был установлен, или если заголовок имеет любое другое значение, кроме истинного или ложного. Вернет истину, если значением заголовка является строка «истина»

42
ответ дан 28 November 2019 в 01:26
поделиться

Заголовок существует:

if (Request.Headers["XYZComponent"] != null)

или даже лучше:

string xyzHeader = Request.Headers["XYZComponent"];
bool isXYZ;

if (bool.TryParse(xyzHeader, out isXYZ) && isXYZ)

, который проверит, установлено ли значение true. Это должно быть защищено от ошибок, поскольку оно не заботится о пробелах в начале / конце и не учитывает регистр (bool.TryParse работает на null)

Аддон: проще с этим методом расширения, который возвращает логическое значение, допускающее значение NULL. Он должен работать как с неверным вводом, так и с нулем.

public static bool? ToBoolean(this string s)
{
    bool result;

    if (bool.TryParse(s, out result))
        return result;
    else
        return null;
}

Использование (поскольку это метод расширения, а не метод экземпляра, это не вызовет исключения для null - это может сбить с толку):

if (Request.Headers["XYZComponent"].ToBoolean() == true)
9
ответ дан Lasse Espeholt 28 November 2019 в 01:26
поделиться
if ((Request.Headers["XYZComponent"] ?? "") == "true")
{
    // header is present and set to "true"
}
1
ответ дан LukeH 28 November 2019 в 01:26
поделиться

Следующий код должен позволить вам проверить наличие заголовка, который вы ищете в Request.Headers :

if (Request.Headers.AllKeys.Contains("XYZComponent"))
{
    // Can now check if the value is true:
    var value = Convert.ToBoolean(Request.Headers["XYZComponent"]);
}
1
ответ дан Rob 28 November 2019 в 01:26
поделиться

Во-первых, вы не делаете этого в своем представлении. Вы делаете это в контроллере и возвращаете модель представления представлению, чтобы представление не заботилось о пользовательских заголовках HTTP, а просто отображало данные в модели представления:

public ActionResult Index()
{
    var xyzComponent = Request.Headers["xyzComponent"];
    var model = new MyModel 
    {
        IsCustomHeaderSet = (xyzComponent != null)
    }
    return View(model);
}
3
ответ дан 28 November 2019 в 01:26
поделиться
string strHeader = Request.Headers["XYZComponent"]
bool bHeader = Boolean.TryParse(strHeader, out bHeader ) && bHeader;

if "true" than true
if "false" or anything else ("fooBar") than false

или

string strHeader = Request.Headers["XYZComponent"]
bool b;
bool? bHeader = Boolean.TryParse(strHeader, out b) ? b : default(bool?);

if "true" than true
if "false" than false
else ("fooBar") than null
1
ответ дан 28 November 2019 в 01:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: