Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
 Аватар для evkaky
4 / 4 / 2
Регистрация: 07.07.2016
Сообщений: 23

Разочарование в HttpContext.Request.Headers

23.09.2016, 23:22. Показов 4536. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Похоже, HpttContext.Request.Headers на практике весьма бесполезная вещь и вот почему:
Как вам известно, многие заголовки могут иметь коллекцию значений, разделенных запятыми, например:
accept-language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4

Пытаемся получить ПЕРВОЕ значение заголовка accept-language:
C#
1
Request.Headers["accept-language"]
Вернет тип StringValues у которого есть индексатор. То, что нужно, думаем мы. Значит, получить первое значение заголовка проще простого:
C#
1
Request.Headers["accept-language"][0]
Чертасдва. Мы получим всё ту же строку
C#
1
"ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"
А по индексу 1 и больше - OutOfBoundaryException

Выкрутится можно так:
C#
1
string lang = Request.GetTypedHeaders().AcceptLanguage[0].Value;
Получается, Request.Headers бесполезен для всех заголовков, которые потенциально могут иметь > 1 значения (ну не сплитить же мне полученную строку по запятым вручную).
В оф. доках по этому поводу ничего не нашел.
Жизнь - боль.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.09.2016, 23:22
Ответы с готовыми решениями:

HttpContext.Current.Request.Params
Здраствуйте Есть код string str = "~/RSS.ashx?code=" + listCity.SelectedItem.Value ; Response.Redirect(str,...

Требуется проверить вызывался ли Request.Form перед тем как вызвать Request.BinaryRead
Требуется проверить вызывался ли Request.Form перед тем как вызвать Request.BinaryRead

Angular7 - Request header field Authorization is not allowed by Access-Control-Allow-Headers in preflight response
Добрый день. Пытаюсь ваять свой первый проект на angular. В процессе появилась необходимость написать сервис для получения курсов валют....

4
 Аватар для Roman_rc
26 / 26 / 12
Регистрация: 04.02.2013
Сообщений: 250
24.09.2016, 18:13
ну не сплитить же мне полученную строку по запятым вручную
Почему нет?
Что тут сложного не понимаю?
У вас на вооружении regex и linq всё что угодно и как угодно можно получить.
1
 Аватар для evkaky
4 / 4 / 2
Регистрация: 07.07.2016
Сообщений: 23
25.09.2016, 21:14  [ТС]
Почему нет?
Что тут сложного не понимаю?
Ничего сложного, но такую типичную работу, которая будет далеко не в одном месте приложения, должен делать фреймворк!
Получить первое значение заголовка - не такая уж и редкая задача для веб-фреймворков, что бы предлагать всем сплитить строку руками.
Вполне логично ожидать, что конструкция
C#
1
Request.Headers["accept-language"][0]
должна сама всё сделать и вернуть первое значение. Ты так не считаешь?
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
25.09.2016, 22:10
а если я передам два accept-language заголовка? ну вот захотелось мне, протокол HTTP позволяет

Добавлено через 1 минуту
мелкомягкие сделали что могли - предусмотрели случай нескольких заголовков
а уж как там что будет split'иться это гиблое дело разбираться, где-то запятая, где-то точка с запятой, где-то тире какой-нибудь, где еще что-то

Добавлено через 26 секунд
короче HttpContext.Request.Headers разочарованы в evkaky
0
 Аватар для evkaky
4 / 4 / 2
Регистрация: 07.07.2016
Сообщений: 23
26.09.2016, 11:36  [ТС]
а если я передам два accept-language заголовка? ну вот захотелось мне, протокол HTTP позволяет
Сервер интепретирует это как тоже самое, что и один заголовок с несколькими значениями разделенными запятой:
accept-language: ru-RU
accept-language: en-US
эквивалентно
accept-language: ru-RU,en-US

Получить распаршенные и сырые значение можно было бы так: (как это реализованно, например, в Request.Query и Request.Form)
C#
1
2
3
Request.Headers["accept-language"] == "ru-RU,en-US"
Request.Headers["accept-language"][0] == "ru-RU"
Request.Headers["accept-language"][1] == "en-US"
Наверное, мой главный вопрос надо сформулировать так: почему для Request.Query и Request.Form сделали удобный интерфейс с индексатором, где уже всё отспличено, а для Request.Headers - нет?

где-то запятая, где-то точка с запятой, где-то тире какой-нибудь, где еще что-то
Разделитель в виде запятой определен спецификацией. "тире какой-нибудь, еще что-то" не получится
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.09.2016, 11:36
Помогаю со студенческими работами здесь

Постоянные ошибки с сессиями (headers already sent и Cannot modify headers)
Добрый день, хоть тема я так понял и избитая но всё же не могу понять логику работы сессий. Вот у меня есть админ панель из десятка файлов....

MCP2200 разочарование
Наконец-то собрал демоплатку на MCP2200, просто разведеный на пины GPIO порт и UART. Начал играться, в первый раз нарвался на нерабочий...

Ещё одно разочарование. Satellite L500
Прошу не удалять. Хочется просто пожаловаться. Или найти методы решения проблем. А их много. Но, всё по порядку. 2 месяца ждал этого...

Request.Response ошибка 400 bad request
Добрый день! Прошу помочь с обработкой запросов в Python 2.7.11 Принимать реквест и сохранить на сервере файл из него уже...

Разочарование в битриксе, или как писать api с нуля
Выучил я значит php,js,jquery,ajax,html,css. Самым популярным цмс оказался битрикс. Скачал значит видеокурсы по битриксу, сам битрикс....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru