2012-05-16 1 views
0

Я разрабатываю один веб-сервис с использованием C#. Возможно перехват запроса клиента с использованием фильтра (с использованием HttpModule). Но как можно изменить запрос. Я могу получить запрос, подобный этомуКак перехватить и изменить httprequests с помощью C#

Stream InputStrm = App.Context.Request.InputStream; 

Я хочу расшифровать запрос & Установите его обратно. Как я могу это сделать ??

ответ

0

Это зависит от используемой технологии веб-сервисов. Если вы используете веб-API или MVC, вы используете ActionFilter. Если вы используете asmx, вы используете SoapExtension. Если вы используете WCF, у вас есть разные точки расширения. Если это всего лишь веб-запрос, HttpModule может применить фильтр, указав HttpContext.Current.Response.Filter = new SomeFilter(HttpContext.Current.Response.Filter), где SomeFilter - это класс, такой как public class SomeFilter : Stream {. Request.Filter должен работать одинаково. http://www.15seconds.com/issue/020417.htm - это старая статья, но немного рассказывает об этих классах Response.Filter.

+0

Я использую asmx.Using SoapExtension это возможно. В фильтре я дешифрую запрос проверки заголовков и проверки подлинности. Если мы используем soapExtension, мы должны указать атрибут дешифрования выше веб-метода. Так дешифрование происходит дважды (в фильтре и в Метод WebService). Я хочу этого избежать. Если я могу изменить запрос в фильтре, дешифрование произойдет только один раз. – user922834

+0

Затем в расширении мыла расшифруем и запишите расшифрованное значение потоку, переданному в метод. Внутри метода вы можете предположить, что контент уже расшифрован. – robrich

+0

На самом деле, используя расширение мыла, направляя вызов DecryptSoap() function.it вернет memystream.It не будет изменять запрос.Я делаю это только для обработки запроса. Мы не можем поставить атрибут decrypt выше соответствующего метода фильтра, например что мы делаем в webmethod.Currently я делаю как это ..EncryptionExtension ObjCrypto = новый EncryptionExtension(); MemoryStream MemStrm = ObjCrypto.DecryptSoap (InputStrm); – user922834