2009-02-18 3 views
8

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

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

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

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

ответ

7

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

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

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

+5

Да, это неортодоксально для WS- *, но я думаю, что люди типа RESTful (RESTafarians?) Были бы классны с ним;) –

+5

Я вполне уверен, что типы RESTful ожидали, что входные параметры будут находиться в пути запроса или в теле запроса. –

+3

Я был немного от этого из-за мобильных сетей. На одном задании мы сделали некоторые hmac'ing наших пользовательских заголовков для проверки данных на другом конце. В некоторых британских сетях их прокси-серверы делали какую-то заголовок/реконструкцию, в ходе которой дополнительное пространство было удалено из нашего заголовка. Не было хорошего решения этого. –

1

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

1

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

1

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

4

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

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

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

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

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