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

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

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

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

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

7 ответов


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

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

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


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


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

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

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

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


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


обратите внимание, что, хотя это нормально использовать пользовательские заголовки в ASP.NET не всегда возможно создать пользовательские заголовки в ASP.NET - ... Ты можешь сделать это, только если бежишь. ASP.NET интегрированный режим (например, IIS 7.0).


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