【发布时间】:2017-11-13 21:29:51
【问题描述】:
我收到“(400) 错误请求。”当我尝试针对 ALM REST API 进行完整身份验证时,第一部分(身份验证)成功)并且我获得了 LWSSO_COOKIE_KEY,但站点会话总是失败并显示 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);
}
}
我已尝试按照this question 从 LWSSO_COOKIE_KEY 剪切 ;Path=/;HTTPOnly,但无济于事。
我找到的API参考(here)似乎很模糊,或者我可能没有理解它......:P
【问题讨论】:
-
您在向
rest/site-session发出post 请求时是否传递了LWSSO_COOKIE_KEY? -
@Barney 嗨,是的 - webRequest.Headers.Set(HttpRequestHeader.Cookie, authenticationCookie);这是从一些示例代码中获取的,这是正确的设置方法吗?
-
authenticationCookie = "LWSSO_COOKIE_KEY=hnzW3mkqZzXzfUzQRscDZz6u-T2qm2DyG25HdVeQ-FVM0UhlPDFQ1kSp8vReWF4etsYhHFOD47DS0gfZ-E91VisYxnTNhdJ9YuhrP74RaabUMOH4OYlhn4_D6ep55PoTeZYgk-1l1dSNfdZb3NwK85yxk2YaajsPrn7cqsAlNIvvvNi3AdOIbrh9oyrS5r3LVo8cCGG_OJ2iwK9nyy8HA325bq4N7JWO7vna2NqBwS_A0Kr2h7_dVs_t_8rlHrwnkegjC2R2dUAL_V_ZZYBR-cARJu8Z4JP-1i73T2PQYGBvpJNrlvnqg9VZz8WITrl9"
-
我不熟悉 C#。在标题中添加 LW cookie 应该可以。
标签: c# rest alm hp-quality-center