Могу ли я изменить значение значения POST без повторной отправки? - PullRequest
5 голосов
/ 24 августа 2009

Это использование ASP.NET 2.0 в мире IIS 6.

У меня есть пользователь, отправляющий форму, которая отправляет данные через POST. Страница, получающая данные, выполняет несколько простых проверок. Если проверка прошла успешно, запускается подпрограмма кода черного ящика, которая в основном считывает данные, используя Request.Form ("NameHere").

Я хотел бы иметь возможность изменить значение элемента POST и затем вернуть его обратно в POST. У меня нет возможности изменить код, который читает Request.Form («NameHere»), поэтому моя идея обойти эту проблему - изменить данные во время события загрузки страницы. Если я изменю значение элемента POST, код черного ящика не нужно изменять.

Можно ли изменить значение элемента в HTTP POST?

Кто-нибудь делал это?

Спасибо!

Ответы [ 3 ]

12 голосов
/ 24 августа 2009

Несмотря на то, что это немного странно, есть способ изменить значение переменной POST.

Мы можем использовать Reflection, чтобы пометить коллекцию Request.Form как не предназначенную только для чтения, изменить значение на то, что нам нужно, и снова пометить его как только для чтения (чтобы другие люди не могли изменять значения). Используйте следующую функцию:

protected void SetFormValue(string key, string value)
{
  var collection = HttpContext.Current.Request.Form;

  // Get the "IsReadOnly" protected instance property.
  var propInfo = collection.GetType().GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);

  // Mark the collection as NOT "IsReadOnly"
  propInfo.SetValue(collection, false, new object[] { });

  // Change the value of the key.
  collection[key] = value;

  // Mark the collection back as "IsReadOnly"     
  propInfo.SetValue(collection, true, new object[] { });
}

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

2 голосов
/ 24 августа 2009

Текущий POST не может быть изменен, однако вы можете создать новый запрос POST и перенаправить на него.

1 голос
/ 24 августа 2009

я считаю единственным способом изменить исходное POST-назначение на ваше собственное, а затем в вашем коде все запросы, отправляемые на ваш адрес, отправляются на адрес черного ящика.

хотя через это есть некоторые издержки.

Насколько я помню, коллекция форм неизменяема, верно? не помню точную структуру, но я думаю, что

Request.Form("NameHere") = "newValue"

не собирается работать.

1010 * привет *

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