intento Request.Form.Set (k, v) pero es excepción de tiro Colección es de solo lecturaC# ¿Puedo modificar las variables de Request.Form?
Respuesta
Esto es exactamente la misma que la modificación Request.Querystring. Ambas son intrínsecamente complicadas por propiedades privadas y lo que podría considerarse un error, sin embargo, hay dos posibles soluciones de las que soy consciente (descartaré el plan de respuesta directo. Es terrible).
método es utilizar la reflexión para modificar la colección directamente:
NameValueCollection oQuery = Request.QueryString;
oQuery = (NameValueCollection)Request.GetType().GetField("_queryString",BindingFlags.NonPublic | BindingFlags.Instance).GetValue(Request);
PropertyInfo oReadable = oQuery .GetType().GetProperty("IsReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
oReadable.SetValue(oQuery, false, null);
oQuery["foo"] = "bar";
oReadable.SetValue(oQuery, true, null);
Plan B, que creo que se presta mejor a la unidad de pruebas es evitar tratar con la recogida directa y en lugar de pasarla como NameValueCollection a cualquier método que desee manejar, copiando poco a poco lo que necesite de él. Lo he usado para burlar solicitudes web.
Editar: Marc Gravell dio razones más elocuentes para el plan B
El formulario es una representación de lo que el cliente envió en la solicitud. ¿Qué es lo que quieres hacer? Personalmente, trataría de separar el código "leer el formulario" del código "hacer algo con los valores", de esa manera, puede hacer cualquier preprocesamiento desde el principio (al leer desde el formulario), y ninguno de los posteriores el código necesita saber acerca de lo que fue realmente enviado - simplemente toma los valores que se le dieron (es decir, nunca habla directamente con la solicitud).
Si también significa que puede probar su lógica sin la necesidad de un formulario, o incluso una solicitud http en absoluto.
En realidad, ASP.NET MVC va a hacer mucho de esto (el párrafo anterior) para usted ...
Tenga en cuenta que puede actualizar la colección .Items - pero esto es un poco más vago (es decir, no se relaciona específicamente con la forma).
(aplausos para la fijación de la typo cierto)
- 1. ¿Puede modificar las variables de alguna manera?
- 2. puede lapply no modificar las variables en un ámbito superior
- 3. C++ apilar las variables y variables montón
- 4. Las variables estáticas en C y C++
- 5. ASP.NET C# Las variables estáticas son globales?
- 6. ASP: request.form no devuelve valor?
- 7. C# dirección de memoria y las variables
- 8. ASP.NET Request.Form Performance
- 9. Imprimir todas las variables de entorno en C/C++
- 10. ¿Cuándo difieren Request.Params y Request.Form?
- 11. C# para las variables miembro privadas
- 12. C# eventos: cómo las variables se accede
- 13. C# Las variables estáticas - alcance y persistencia
- 14. Modificar/ver variables estáticas durante la depuración en Eclipse
- 15. ¿Cómo puedo usar ddply con variables variables?
- 16. Obtener todas las variables env en C \ C++ en Windows
- 17. ¿Deben devolverse los métodos de clase internos o simplemente modificar las variables de instancia en python?
- 18. C++ variables de subprocesamiento volátil
- 19. Usando C/Pthreads: ¿las variables compartidas deben ser volátiles?
- 20. Request.Form potencialmente peligroso en WSFederationAuthenticationModule.IsSignInResponse
- 21. Modificar variables estáticas durante la depuración en Eclipse
- 22. ¿Dónde puedo ver las variables de entorno de WebSphere?
- 23. ¿Cómo puedo acceder a las variables locales desde dentro de una función anónima de C++ 11?
- 24. ¿Puedo obtener las variables locales del método a través de un seguimiento de pila en C#?
- 25. ¿Las variables de instancia son las nuevas variables globales?
- 26. Imprimir todas las variables globales/variables locales?
- 27. ¿Cómo puedo acceder a las variables de JavaScript en JSP?
- 28. ¿Dónde puedo encontrar información sobre las variables especiales de Perl?
- 29. ¿Puedo confiar en las variables de mi entorno?
- 30. Cómo puedo usar las variables para SECAR coliméos de Vim
Manipulación de cosas privadas de esta manera es de ninguna manera una cosa sugerida y se debe evitar tanto como sea posible (~ = a toda costa). Después de todo, se hacen privados por una razón. Confiarás en una versión específica de una biblioteca. Cualquier cambio en la implementación subyacente podría romper su aplicación. –
Y verá que defiendo el plan B – annakata
Plan A se perdió algo de detalle. Creo que no es el camino correcto. Puedes probar por ti mismo. –