Могу ли я передавать пользовательские данные в HTTP-заголовке?

У меня есть целая куча веб-сервисов с несколькими веб-методами. Потребители этих услуг разнообразны и много. Я хочу расширить каждый из этих веб-методов дополнительным необязательным параметром (Int64 или Int32), но добавление новых методов с этим дополнительным (необязательным параметром) - это большая работа и получение клиентами новых методов будет еще более трудоемким.

Итак, мне было интересно, могу ли я позволить клиентам, которые хотели бы воспользоваться новой функцией, которую этот параметр предоставляет, может передать этот Int в HTTP-заголовке или каким-либо другим способом.

Итак, первый вопрос: могу ли я передать int в HTTP-заголовке? Если да, то как это сделать в С#/ASP.NET?

В противном случае, какие у вас другие предложения для решения этой проблемы?

Ответ 1

Это немного неортодоксально, и я уверен, что некоторые пуристы будут расстроены этой идеей (заголовки должны использоваться только для транспортировки сообщения и не должны содержать семантику сообщения).

Практически это выполнимо, но вы хотите быть уверены, что все ваши клиенты могут добавить эти заголовки. Если ваши клиенты используют инструменты для вызова веб-методов, а не генерируют HTTP-запросы сами (что, я надеюсь, так), то есть реальный шанс, что это проблема.

Почему так сложно добавить эти дополнительные перегрузки методов?

Ответ 2

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

Ответ 3

Request.Headers.Add("headername", "headervalue");
Response.Headers.Add("headername", "headervalue");

Ответ 4

Я использовал эту концепцию один раз, чтобы обработать переадресацию выхода для аякс-вызовов в веб-приложении интрасети (ничего не связано с webservice).

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

Определенно не то, что вы хотели бы сделать по умолчанию.

Ответ 5

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

Ответ 6

Обратите внимание на то, что при использовании пользовательских заголовков в ASP.NET не всегда возможно создавать пользовательские заголовки в ASP.NET. Это можно сделать только в том случае, если вы используете интегрированный режим ASP.NET(т.е. IIS 7.0).

Ответ 7

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