Leer los datos de la publicación enviados al formulario ASP.Net

109

Tengo un formulario de inicio de sesión que funciona en una aplicación asp.net. Material estándar con un cuadro de texto de nombre de usuario y contraseña y un botón para procesar el inicio de sesión. Funciona bien.

Tengo un nuevo requisito para permitir que el usuario ingrese el nombre de usuario y la contraseña desde una página html simple separada que no es parte de mi aplicación asp.net. Planeo lograr esto usando html estándar: formulario, entrada, botón de envío, etc. La acción del formulario será la URL de mi página de inicio de sesión de asp.net y su método será POST.

Lo que quiero hacer en el código C # detrás de la página del formulario de inicio de sesión de asp.net, presumiblemente en el evento Page_Load, es verificar si la solicitud de la página contiene un nombre de usuario y un valor de contraseña. Si es así, entonces necesito para leer esos valores y procesar el inicio de sesión como si alguien hubiera hecho clic en el botón de inicio de sesión en la página asp.net. De lo contrario, mostraré el formulario de inicio de sesión como de costumbre.

¿Cómo verifico la existencia y leo los valores de nombre de usuario y contraseña en la solicitud de mi página?

daveywc
fuente

Respuestas:

151

Lea Request.Form NameValueCollection y procese su lógica en consecuencia:

NameValueCollection nvc = Request.Form;
string userName, password;
if (!string.IsNullOrEmpty(nvc["txtUserName"]))
{
  userName = nvc["txtUserName"];
}

if (!string.IsNullOrEmpty(nvc["txtPassword"]))
{
  password = nvc["txtPassword"];
}

//Process login
CheckLogin(userName, password);

... donde "txtUserName" y "txtPassword" son los nombres de los controles en la página de publicación.

Cerebrus
fuente
¿Qué pasa con las matrices de bytes? ¿Tendría una cadena como esa y luego la convertiría en una matriz de bytes, o qué? Estoy subiendo un archivo a serve.r
Fallenreaper
2
¿Tiene curiosidad por qué iterar sobre una colección de valores de nombre en lugar de verificar la solicitud directamente para cada nombre de control?
Howiecamp
@Howiecamp alguna vez encontró la respuesta a esa pregunta? También estoy intrigado.
tfrascaroli
¡ESTA! Estuve depurando durante 5 horas sólidas tratando de averiguar por qué diablos no puedo sacar los datos de este formulario.
Llamado el
13
if (!string.IsNullOrEmpty(Request.Form["username"])) { ... }

nombre de usuario es el nombre de la entrada en la página de envío. La contraseña se puede obtener de la misma forma. Si no es nulo o vacío, existe, entonces inicie sesión con el usuario (no recuerdo los pasos exactos para la Membresía ASP.NET, asumiendo que eso es lo que está usando).

John Sheehan
fuente
3
NameValueCollection nvclc = Request.Form;
string   uName= nvclc ["txtUserName"];
string   pswod= nvclc ["txtPassword"];
//try login
CheckLogin(uName, pswod);
gdmanandamohon
fuente
Da una referencia adecuada de tu respuesta para que sea más factible.