c# request.form

C#¿Puedo modificar las variables de Request.Form?



(2)

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 (cuando lee desde el formulario), y ninguno de los posteriores el código necesita saber lo que realmente se envió; simplemente toma los valores que se le asignaron (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 hará 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 el formulario).

(aplausos por corregir el error tipográfico por cierto)

Intento Request.Form.Set (k, v) pero es excepción de tiro La colección es de solo lectura


Esto es exactamente lo mismo que modificar 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).

El método uno es usar 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);

El plan B, que creo que se presta mejor a las pruebas unitarias, es evitar el manejo directo de la colección y, en su lugar, pasarlo como una colección NameValue a cualquier método que desee manejar, copiando lo que sea que necesite. Lo he usado para burlar solicitudes web.

Editar: Marc Gravell dio razones más elocuentes para el plan B