Pergunta

Isso está usando asp.net 2.0 em um mundo IIS 6.

Eu tenho um usuário enviando um formulário que envia os dados para ser via postagem. A página que recebe os dados faz algumas validações simples. Se a validação passar, uma rotina de código de caixa preta executa que basicamente lê os dados usando o request.form ("namehere").

Eu gostaria de poder alterar o valor do item de postagem e depois colocá -lo de volta na postagem. Não tenho a capacidade de modificar o código que lê o request.form ("namehere"), então meu trabalho em torno da ideia é modificar os dados durante o evento de carga da página. Se eu alterar o valor do item de postagem, o código da caixa preta não precisará ser modificado.

É possível alterar o valor de um item na postagem HTTP?

Alguém já fez isso?

Obrigado!

Foi útil?

Solução

Embora seja um pouco hacky, existe uma maneira de alterar o valor de uma variável post.

Podemos usar a reflexão para marcar o Request.Form Coleta como não readonly, altere o valor para o que queremos e marque-o novamente como reado de novo (para que outras pessoas não possam mudar de valores). Use a seguinte função:

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

Eu testei o código na minha máquina e funciona bem. No entanto, não posso dar garantias de desempenho ou portabilidade.

Outras dicas

A postagem atual não pode ser alterada; no entanto, você pode criar uma nova solicitação de postagem e redirecionar para isso.

Vejo como a única maneira de alterar o pós-deliminação original para o seu próprio e, em seu código, todas as solicitações que vão para o seu endereço são despachadas para o endereço da caixa preta.

Há alguma sobrecarga por isso.

Tanto quanto me lembro, a coleta de forma é não modificável, certo? Não se lembre da estrutura exata, mas acho que

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

não vai funcionar.

Saudações

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top