Могу ли я передать пользовательские данные в заголовок HTTP? - PullRequest
12 голосов
/ 19 февраля 2009

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

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

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

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

Ответы [ 7 ]

10 голосов
/ 19 февраля 2009

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

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

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

7 голосов
/ 19 февраля 2009

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

5 голосов
/ 19 февраля 2009
Request.Headers.Add("headername", "headervalue");
Response.Headers.Add("headername", "headervalue");
2 голосов
/ 19 февраля 2009

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

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

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

1 голос
/ 19 февраля 2009

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

1 голос
/ 19 февраля 2009

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

1 голос
/ 19 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...