Posso alterar o valor de um valor pós sem postar novamente?
-
19-09-2019 - |
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!
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