Можно ли переслать идентификатор FormsAuthentication текущего пользователя другому действию контроллера? - PullRequest
1 голос
/ 07 августа 2009

Я хотел бы использовать представления ASP.NET MVC в качестве механизма почтовых шаблонов. Для этого я вызываю одно действие контроллера из другого действия контроллера, используя System.ComponentModel.Component.WebClient, анализирую возвращенную веб-страницу и отправляю ее по электронной почте.

В этом случае возможно ли перенаправить учетные данные текущего пользователя (я использую FormsAuthentication) в действие контроллера, запрошенное WebClient? Пароли пользователей зашифрованы, поэтому я не могу просто создать новый экземпляр NetworkCredentials с его именем пользователя и паролем.

Ответы [ 2 ]

5 голосов
/ 07 августа 2009

Да, вы можете просто скопировать файл cookie .ASPXAUTH из вашего текущего объекта Request в WebClient

РЕДАКТИРОВАТЬ: Я сам на самом деле не пробовал, поэтому, возможно, файл cookie .ASPXAUTH удален из объекта Request по соображениям безопасности.

Но так как у вас есть доступ к ключу машины, вы можете создавать свои собственные куки на лету. Вот код, который должен это сделать (я не могу найти проект, где я на самом деле это сделал)

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

Этот код создает cookie для проверки подлинности форм для вашего текущего имени пользователя и сроком действия 5 минут.

1 голос
/ 07 августа 2009

Вместо выполнения http-запроса, вам не нужно что-то вроде " рендеринга представления в строку "

...