본문 바로가기

.NET/MVC.NET

Cross Domain 해결하기

오늘 업무에서 다른 도메인에 자원을 써야할 부분이 있었다.

기본적으로 새로하는 프로젝트는 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에는 쿠키기반의 인증절차로 인한 로그인한 자의 쿠키값을 가지고 어떤 행위를 한다.

쩝 그래서 위의 구문과 같이 쿠키를 컨테이너에 담아 리퀘스트를 보낸다.

쩝 쉽다. 하지만 모르는 사람이 많기에 글을 써본다.