Przeczytaj dane postu przesłane do formularza ASP.Net

109

Mam działający formularz logowania w aplikacji asp.net. Standardowe rzeczy z polem tekstowym nazwy użytkownika i hasła oraz przyciskiem do przetwarzania logowania. Działa w porządku.

Mam nowe wymaganie, aby zezwolić użytkownikowi na wprowadzenie nazwy użytkownika i hasła z oddzielnej zwykłej strony HTML, która nie jest częścią mojej aplikacji asp.net. Planuję to osiągnąć przy użyciu standardowego html - formularz, dane wejściowe, przycisk przesyłania itp. Formularzem będzie adres URL mojej strony logowania asp.net, a metoda będzie POST.

To, co chcę zrobić w kodzie C # za stroną formularza logowania asp.net, prawdopodobnie w zdarzeniu Page_Load, to sprawdzić, czy żądanie strony zawiera wartość nazwy użytkownika i hasła, które są przekazywane. Jeśli tak, potrzebuję odczytać te wartości i przetwarzać logowanie tak, jakby ktoś kliknął przycisk logowania na stronie asp.net. Jeśli nie, to jak zwykle wyświetlę formularz logowania.

Jak sprawdzić istnienie i odczytać wartości nazwy użytkownika i hasła w żądaniu dotyczącym mojej strony.

daveywc
źródło

Odpowiedzi:

151

Przeczytaj Request.Form NameValueCollection i odpowiednio przeprowadź swoją logikę:

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);

... gdzie „txtUserName” i „txtPassword” to nazwy elementów sterujących na stronie publikowania.

Cerebrus
źródło
A co z tablicami bajtów? Czy miałbyś taki ciąg, a następnie przekonwertowałbyś go na tablicę bajtów, czy co? Przesyłam plik do serv.r
Fallenreaper,
2
Ciekawi Cię, dlaczego iteruje się po kolekcji nazw wartości, zamiast bezpośrednio sprawdzać żądanie dla każdej nazwy kontrolki?
Howiecamp
@Howiecamp znalazł kiedyś odpowiedź na to pytanie? Ja też jestem zaintrygowany.
tfrascaroli
TO! Debugowałem przez solidne 5 godzin, próbując dowiedzieć się, dlaczego do cholery nie mogę wyciągnąć danych z tego formularza.
Callat
13
if (!string.IsNullOrEmpty(Request.Form["username"])) { ... }

nazwa użytkownika to nazwa wejścia na stronie przesyłania. Hasło można uzyskać w ten sam sposób. Jeśli nie jest pusty lub pusty, istnieje, a następnie zaloguj się użytkownika (nie przypominam sobie dokładnych kroków dotyczących członkostwa ASP.NET, zakładając, że tego właśnie używasz).

John Sheehan
źródło
3
NameValueCollection nvclc = Request.Form;
string   uName= nvclc ["txtUserName"];
string   pswod= nvclc ["txtPassword"];
//try login
CheckLogin(uName, pswod);
gdmanandamohon
źródło
Podaj odpowiednie odniesienie do swojej odpowiedzi, aby było to bardziej wykonalne.