2017-11-10 15 views
0

'(400) 잘못된 요청'이 표시됩니다. ALM REST API에 대해 완전한 인증을 시도하면 첫 번째 부분 (인증)이 성공합니다. 그리고 LWSSO_COOKIE_KEY가 표시되지만 사이트 세션은 항상 400 오류 코드로 실패합니다.ALM Rest API : 사이트 세션에서 '원격 서버에서 오류 (400)가 잘못되었습니다.'가 반환됩니다.

내가 뭘 잘못하고 있니? 아주 혼란스러워!

// Authentication XML : 0 = User, 1 = Password 
    private const string AuthenticationXML = @"<alm-authentication>" + 
     "<user>{0}</user><password>{1}</password></alm-authentication>"; 

    baseRequestURL = settings.QualityCentreURL + "/qcbin/"; 

인증을 먼저 (및 성공)한다 :

string authRequest = baseRequestURL + "authentication-point/alm-authenticate"; 
HttpWebRequest myauthrequest = (HttpWebRequest)WebRequest.Create(authRequest); 

string xml = String.Format(AuthenticationXML, qcSettings.Username, qcSettings.Password); 

byte[] Requestbytes = Encoding.UTF8.GetBytes(xml); 
myauthrequest.Method = "POST"; 
myauthrequest.ContentType = "application/xml"; 
myauthrequest.ContentLength = Requestbytes.Length; 
myauthrequest.Accept = "application/xml"; 

Stream RequestStr = myauthrequest.GetRequestStream(); 
RequestStr.Write(Requestbytes, 0, Requestbytes.Length); 
RequestStr.Close(); 
HttpWebResponse myauthres = (HttpWebResponse)myauthrequest.GetResponse(); 

authenticationCookie = myauthres.Headers.Get("Set-Cookie"); 

사이트-세션 코드는 다음과 같습니다

public void GetSiteSession() 
    { 
     // Creat the web request fore site-session. 
     string request = baseRequestURL + "rest/site-session"; 
     HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(request); 

     string xml = String.Empty; 
     byte[] requestbytes = Encoding.UTF8.GetBytes(xml); 

     // Update the attributes before sending. 
     webRequest.Method = "POST"; 
     webRequest.ContentType = "application/xml"; 
     webRequest.Accept = "application/xml"; 
     webRequest.Headers.Set(HttpRequestHeader.Cookie, authenticationCookie); 

     try 
     { 
      Stream requestStream = webRequest.GetRequestStream(); 
      requestStream.Write(requestbytes, 0, requestbytes.Length); 
      requestStream.Close(); 

      HttpWebResponse webRequestResponse = (HttpWebResponse)webRequest.GetResponse(); 
      Stream responseStream = webRequestResponse.GetResponseStream(); 
      XDocument doc = XDocument.Load(responseStream); 
     } 
     catch (System.Net.WebException except) 
     { 
      Console.WriteLine(except.Message); 
     } 
    } 

나는 절단 시도, 경로 = /; Http 만 LWSSO_COOKIE_KEY에서 this question에 따라,하지만 아무 소용이 없습니다.

내가 찾은 API 참조 (here)은 내가 이해되지 않았 음을 가능성이 큰 애매 것 같다 그것은 ... : P

+0

게시 요청을'rest/site-session'으로 할 때 LWSSO_COOKIE_KEY를 전달합니까? – Barney

+0

@ 바니 안녕하세요, yes - webRequest.Headers.Set (HttpRequestHeader.Cookie, authenticationCookie); 이것은 몇 가지 예제 코드에서 가져온 것이고, 올바른 방법은 그것을 설정하는 것입니까? –

+0

authenticationCookie = "LWSSO_COOKIE_KEY = hnzW3mkqZzXzfUzQRscDZz6u-T2qm2DyG25HdVeQ-FVM0UhlPDFQ1kSp8vReWF4etsYhHFOD47DS0gfZ-E91VisYxnTNhdJ9YuhrP74RaabUMOH4OYlhn4_D6ep55PoTeZYgk-1l1dSNfdZb3NwK85yxk2YaajsPrn7cqsAlNIvvvNi3AdOIbrh9oyrS5r3LVo8cCGG_OJ2iwK9nyy8HA325bq4N7JWO7vna2NqBwS_A0Kr2h7_dVs_t_8rlHrwnkegjC2R2dUAL_V_ZZYBR-cARJu8Z4JP-1i73T2PQYGBvpJNrlvnqg9VZz8WITrl9" –

답변

0

사과, 12.53과 나 '사용하고있는 것을 보인다 api/authentication/sign-in '

 string requestURL = baseRequestURL + "api/authentication/sign-in"; 

     try 
     { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestURL); 

      var credentials = String.Format("{0}:{1}", qcSettings.Username, qcSettings.Password); 
      request.CookieContainer = authenticationCookieContainer; 
      request.Headers.Set(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(credentials))); 

      var authResponse = request.GetResponse(); 
      errorString = String.Empty; 
     } 
     catch (System.Net.WebException except) 
     { 
      errorString = except.Message; 
      return false; 
     } 

     errorString = String.Empty; 
     return true; 
    }