1

ASP.NET MVC의 뷰를 메일 템플릿 엔진으로 사용하고 싶습니다. 이를 위해 System.ComponentModel.Component.WebClient를 사용하여 다른 컨트롤러 동작에서 하나의 컨트롤러 동작을 호출하고 반환 된 웹 페이지를 구문 분석하여 전자 메일로 보냅니다.현재 사용자의 FormsAuthentication Identity를 다른 Controller 작업으로 전달할 수 있습니까?

이 시나리오에서는 현재 사용자의 로그인 자격 증명 (FormsAuthentication을 사용하고 있습니다)을 WebClient가 요청한 컨트롤러 작업으로 전달할 수 있습니까? 사용자 암호가 암호화되어 있으므로 사용자 이름과 암호로 새 NetworkCredentials 인스턴스를 만들 수는 없습니다.

답변

5

예, 당신은 단지 WebClient

편집에 현재 Request 개체에서 .ASPXAUTH 쿠키를 복사 할 수 있습니다 : 사실은 그래서 어쩌면 .ASPXAUTH 쿠키에 대한 요청 개체에서 제거되고,이 자신을 시도하지 않은 보안상의 이유로

하지만 컴퓨터 키에 액세스 할 수 있으므로 직접 쿠키를 만들 수 있습니다. 여기를해야 할 코드는 (내가 실제로 않았다 어디 프로젝트를 찾을 수 없습니다)

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

이 코드는 현재 사용자 이름에 대한 5 분의 만료 시간과 폼 인증 쿠키를 생성합니다.

+0

좋은 소리 나는 쿠키를 설정하는 웹 클라이언트 부분을 파악,하지만 난 .ASPXAUTH 어떻게 읽을 수 있습니까? 어떤 이유로 로그인 한 경우에도 다음 용어가 적용됩니다. requestContext.HttpContext.Response.Cookies [ ". ASPXAUTH"]. Value.Length == 0 –

+0

답변을 통해이 문제를 해결할 수있는 방법을 추가했습니다. – chris166

+1

당신의 코멘트를 다시 읽으십시오. HttpContext.REQUEST를보고 응답해야합니다! – chris166

1

대신에 HTTP 요청을 수행하는, 당신은 같은 뭔가를 찾고되지 않습니다 "rendering a view to a string는"

+1

그게 제가 처음 시도한 것입니다. 그러나 많은 사람들이 인터넷 검색을하고 (ASP.NET MVC 1.0 최종 버전으로 작업하지 않은) 다른 접근 방식을 시도한 후에 대신 웹 클라이언트를 선택했습니다. 성능은 여기서 문제가되지 않으므로 오버 헤드에 대해서는별로 신경 쓰지 않습니다. –

관련 문제