오늘 업무에서 다른 도메인에 자원을 써야할 부분이 있었다.
기본적으로 새로하는 프로젝트는 MVC3인데 기존에 잘 돌아가고 있는 공통 자원을 써야만 했다.
아...... 기존에는 가상디렉토리를 잡아서 썼는데
쩝 가상디렉토리를 쓰려니 해당 사이트의 dll들이 필요했다. 이건 아니다 싶어
아래와 같이 코딩했다.
Ajax로 비동기 통신을 해서 거기에서 나오는 Html을 가져오는 것이다. 간단하다. 하지만 유용하다.
Client단에서의 Ajax는 다 아시는 관계로 Controller에 코드만 살펴보겠다.
[HttpGet]
public string MyStudyList()
{
string result = String.Empty;
HttpWebRequest request = WebRequest.Create(String.Format("yoursite{0}",Request.Url.Query)) as HttpWebRequest;
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
request.CookieContainer = new CookieContainer();
HttpCookieCollection cookies = Request.Cookies;
for (int i = 0; i < cookies.Count; i++)
{
HttpCookie httpCookie = cookies.Get(i);
Cookie cookie = new Cookie();
cookie.Domain = request.RequestUri.Host;
cookie.Expires = httpCookie.Expires;
cookie.Name = httpCookie.Name;
cookie.Path = httpCookie.Path;
cookie.Secure = httpCookie.Secure;
cookie.Value = httpCookie.Value;
request.CookieContainer.Add(cookie);
}
WebResponse response = request.GetResponse();
using (Stream stream = response.GetResponseStream())
{
using (StreamReader sr = new StreamReader(stream, Encoding.GetEncoding(51949)))
{
result = sr.ReadToEnd();
}
}
return result;
}
위의 코드에서 중요한 부분은 for로 쌓여 있는 부분이다.
해당 url에는 쿠키기반의 인증절차로 인한 로그인한 자의 쿠키값을 가지고 어떤 행위를 한다.
쩝 그래서 위의 구문과 같이 쿠키를 컨테이너에 담아 리퀘스트를 보낸다.
쩝 쉽다. 하지만 모르는 사람이 많기에 글을 써본다.