переопределить Request.QueryString

Здравствуйте уважаемые разработчики!

Мне было интересно, можно ли как-то переопределить объект .Net Request.QueryString? Было бы очень хорошо, если бы это можно было сделать без создания моего собственного HTTP-модуля.

Мне поручили RSA(1024) зашифровать все строки запросов в моем приложении. Тем не менее, приложение уже создано, и есть МНОЖЕСТВО мест, где задаются строки запросов, поэтому в идеале я хотел бы внести глобальное изменение, которое расшифровало бы запрос и поместило его в обычный Request.QueryString, чтобы мне не пришлось менять мой код везде и, возможно, передавать его другим разработчикам в моей команде, и им также не нужно менять свой код.

Теперь я уже создал объект шифрования и использую SessionID для солей, чтобы сделать ключи уникальными для каждого сеанса. Я также попытался перехватить HTTP-запрос в Global.asax, чтобы переписать путь запроса с расшифрованным запросом, однако это было неудачей, поскольку любые обратные передачи, выполняемые на этих страницах, помещают расшифрованную строку запроса обратно в POST, что я, очевидно, не хочу.

Итак, теперь я нахожусь на этапе, когда я хотел бы вместо того, чтобы переписывать путь, перехватывать или переопределять объект Request.QueryString на глобальном уровне и использовать там мои методы дешифрования всякий раз, когда вызывается этот [ключ], и, таким образом, снова не нужно прекращать использование Request.QueryString. Однако после нескольких часов поиска в Интернете я не смог найти ни одного примера того, как это сделать...

Если кто-то может помочь мне с этим, я был бы очень благодарен!


person MaxOvrdrv    schedule 16.03.2013    source источник
comment
Request.QueryString представляет собой запрос браузера, который никогда не изменяется и поэтому доступен только для чтения. Если вам нужно абстрагировать код от работы с этим объектом, чтобы скрыть конфиденциальные данные.   -  person Dmitry Sadakov    schedule 16.03.2013
comment
я знаю, что такое QS... я пытаюсь переопределить объект .Net, чтобы переопределить метод Get для этого, чтобы я мог расшифровать его там...   -  person MaxOvrdrv    schedule 16.03.2013


Ответы (1)


Я думаю, что самый простой способ сделать это — использовать метод расширения. Возможно что-то вроде этого:

    class Program 
{
    static void Main() 
    {
        var decryptedValue = HttpContext.Current.Request.DecryptQueryStringParam("myParam");
    }
}

public static class HttpRequestExtensions 
{
    public static string DecryptQueryStringParam(this HttpRequest extendee, string name)
    {
        // do stuff to decrypt
        return DecryptMethodStub(extendee.QueryString[name]);
    }

    private string DecryptMethodStub(string queryString)
    {
        return "something decrypted the string";
    }
}

Обратите внимание, что приведенный выше класс Program предназначен только для иллюстративных целей... в действительности вы должны вызывать Request.{ExtensionMethod} внутри тела страницы веб-форм asp.net или контроллера MVC, которые уже обеспечивают прямой доступ к объекту HttpRequest через свойство запроса.

вот некоторая информация о расширениях:

http://msdn.microsoft.com/en-us/library/bb383977.aspx

person Austin    schedule 19.12.2013