Могу ли я изменить значение почтового значения без повторного выпуска?

StackOverflow https://stackoverflow.com/questions/1323130

  •  19-09-2019
  •  | 
  •  

Вопрос

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

У меня есть пользователь, отправляющий форму, которая отправляет данные, чтобы они были через пост. Страница, получающая данные, выполняет некоторые простые проверки. Если проверка проходит, то подпрограмма кода черного ящика выполняется, которая в основном считывает данные с использованием request.form ("namehere").

Я хотел бы иметь возможность изменить значение пункта сообщения, а затем поместить его обратно на сообщение. У меня нет возможности изменить код, который считывает request.form («namehere»), поэтому моя идея - изменить данные во время события загрузки страницы. Если я изменю значение пункта Post, то код Black-Box не должен быть изменен.

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

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

Спасибо!

Это было полезно?

Решение

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

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

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[] { });
}

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

Другие советы

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

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

Есть некоторые накладные расходы через это, хотя.

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

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

не будет работать.

С уважением

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top