1

Ich möchte ASP.NET MVC-Ansichten als Mail-Vorlagen-Engine verwenden. Dazu rufe ich eine Controller-Aktion von einer anderen Controller-Aktion mit einem System.ComponentModel.Component.WebClient auf, parse die zurückgegebene Webseite und sende sie per E-Mail.Ist es möglich, die FormsAuthentication Identity des aktuellen Benutzers an eine andere Controller-Aktion weiterzuleiten?

Ist es in diesem Szenario möglich, die Anmeldeinformationen des aktuellen Benutzers (ich verwende FormsAuthentication) an die vom WebClient angeforderte Controlleraktion weiterzuleiten? Benutzerpasswörter sind verschlüsselt, sodass ich nicht einfach eine neue NetworkCredentials-Instanz mit seinem Benutzernamen und Passwort erstellen kann.

Antwort

5

Ja, Sie können nur das .ASPXAUTH Cookie von Ihrem aktuellen Request Objekt in dem EDIT WebClient

kopieren: Ich habe nicht wirklich versucht, diese selbst, so vielleicht das .ASPXAUTH Cookie aus dem Request-Objekt entfernt wird sicherheits Gründe.

Aber da Sie Zugriff auf den Maschinenschlüssel haben, können Sie Ihre eigenen Cookies im laufenden Betrieb erstellen. Hier ist der Code, der es tun soll (ich kann das Projekt nicht finden, wo ich tat eigentlich, dass)

var ticket = new FormsAuthenticationTicket(User.Identity.Name, true, 5); 
string aspxAuthCookieValue = FormsAuthentication.Encrypt(ticket); 

Dieser Code erstellt eine Formularauthentifizierungscookie für Ihren aktuellen Benutzername und mit einer Ablaufzeit von 5 Minuten.

+0

Hört sich gut an und ich herausgefunden das webclient Teil ein Cookie zu setzen, aber wie kann ich lesen .ASPXAUTH? Aus irgendeinem Grund ist der folgende Begriff wahr, obwohl ich eingeloggt bin: requestContext.HttpContext.Response.Cookies [". ASPXAUTH"]. Value.Length == 0 –

+0

Ich habe einen Weg darum herum in meiner Antwort hinzugefügt – chris166

+1

Lesen Sie Ihren Kommentar noch einmal: Sie sollten in HttpContext.REQUEST nicht reagieren! – chris166

1

Anstatt eine HTTP-Anfrage durchzuführen, nicht wahr Suche nach etwas, wie „rendering a view to a string

+1

Das habe ich auch zuerst ausprobiert, aber nachdem ich viel gegoogelt und verschiedene Ansätze dafür getestet habe (von denen keiner mit ASP.NET MVC 1.0 final gearbeitet hat), wählte ich stattdessen einen Webclient. Leistung ist hier kein Problem, deshalb kümmert es mich nicht wirklich um den Overhead. –

Verwandte Themen