C# 如何使用c在content server中使用api/v1/auth method=post获取OTCSticket#
以下是我使用postman进行的API调用,并在响应正文中获取一张票证(屏幕截图): 我无法在C#中的HttpWebRequest响应中获取票证。请参见下面的小样本代码: C#代码C# 如何使用c在content server中使用api/v1/auth method=post获取OTCSticket#,c#,C#,以下是我使用postman进行的API调用,并在响应正文中获取一张票证(屏幕截图): 我无法在C#中的HttpWebRequest响应中获取票证。请参见下面的小样本代码: C#代码 HttpWebRequest Request = WebRequest.Create(strUrl) as HttpWebRequest; Request.Method = "POST"; Request.Headers.Add("Authorization", "Basic <>"); //Reque
HttpWebRequest Request = WebRequest.Create(strUrl) as HttpWebRequest;
Request.Method = "POST";
Request.Headers.Add("Authorization", "Basic <>");
//Request.ContentType = "application/form-data";
Request.KeepAlive = true;
string data = string.Format("username=" + UserName + "&password=" + Password);
byte[] dataStream = Encoding.UTF8.GetBytes(data);
Request.ContentLength = dataStream.Length;
using (Stream newStream = Request.GetRequestStream())
{
// Send the data.
newStream.Write(dataStream, 0, dataStream.Length);
newStream.Close();
}
var Response = (HttpWebResponse)Request.GetResponse();
using (var stream = Response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
if (Response.StatusCode != HttpStatusCode.OK)
throw new Exception("The request did not complete successfully and returned status code " + Response.StatusCode);
ResponseTicket strTicket= JsonConvert.DeserializeObject<ResponseTicket>(reader.ToString());
JsonConvert.DeserializeObject(Response.GetResponseStream().ToString());
MessageBox.Show(strTicket.Ticket);
}
HttpWebRequest-Request=WebRequest.Create(strUrl)为HttpWebRequest;
Request.Method=“POST”;
请求。标题。添加(“授权”、“基本”);
//Request.ContentType=“申请/表格数据”;
Request.KeepAlive=true;
string data=string.Format(“username=“+username+”&password=“+password”);
字节[]数据流=Encoding.UTF8.GetBytes(数据);
Request.ContentLength=dataStream.Length;
使用(Stream newStream=Request.GetRequestStream())
{
//发送数据。
Write(dataStream,0,dataStream.Length);
newStream.Close();
}
var Response=(HttpWebResponse)Request.GetResponse();
使用(var stream=Response.GetResponseStream())
使用(变量读取器=新的流读取器(流))
{
if(Response.StatusCode!=HttpStatusCode.OK)
抛出新异常(“请求未成功完成,返回状态码”+Response.StatusCode);
ResponseGet strTicket=JsonConvert.DeserializeObject(reader.ToString());
JsonConvert.DeserializeObject(Response.GetResponseStream().ToString());
MessageBox.Show(strTicket.Ticket);
}
其中asstatuscode=200
。但内容长度为0。
在CS10.5API上很难找到任何有意义的完整帮助。我已经检查了AppWorks平台,但没有结果。如果有人能在代码中找到问题,我将不胜感激。显然,我看不出来。我不知道这是否仍然是您的问题。对我来说也是,但我发现:
public string LoginAsAdminAndRetrieveTicket(string userName, string passWord, string domain, string url)
{
var uri = $"http://{url}/otcs/llisapi.dll/api/v1/auth";
var request = new HttpRequestMessage();
request.Headers.Add("Connection", new[] { "Keep-Alive" });
request.Headers.Add("Cache-Control", "no-cache, no-store, must-revalidate");
request.Headers.Add("Pragma", "no-cache");
request.RequestUri = new Uri(uri);
request.Method = HttpMethod.Post;
request.Content = new StringContent($"username={userName};password={passWord}", Encoding.UTF8, "application/x-www-form-urlencoded");
var httpClientHandler = new HttpClientHandler
{
Proxy = WebRequest.GetSystemWebProxy(),
UseProxy = true,
AllowAutoRedirect = true
};
using (var client = new HttpClient(httpClientHandler))
{
var response = client.SendAsync(request).Result;
string ticket;
var vals = response.Headers.TryGetValues("OTCSTicket", out IEnumerable<string> temp) ? temp : new List<string>();
if (vals.Any())
{
ticket = vals.First();
}
return response.Content.ReadAsStringAsync().Result;
}
}
公共字符串登录AdminandRetrieveticket(字符串用户名、字符串密码、字符串域、字符串url)
{
var uri=$“http://{url}/otcs/llisapi.dll/api/v1/auth”;
var request=new-HttpRequestMessage();
Add(“Connection”,new[]{“Keep Alive”});
添加(“缓存控制”,“无缓存,无存储,必须重新验证”);
添加(“Pragma”,“无缓存”);
request.RequestUri=新Uri(Uri);
request.Method=HttpMethod.Post;
request.Content=newstringcontent($“username={username};password={password}”,Encoding.UTF8,“application/x-www-form-urlencoded”);
var httpClientHandler=新的httpClientHandler
{
Proxy=WebRequest.GetSystemWebProxy(),
UseProxy=true,
AllowAutoRedirect=true
};
使用(var客户端=新的HttpClient(httpClientHandler))
{
var response=client.sendaync(request.Result);
串票;
var vals=response.Headers.TryGetValues(“OTCSTicket”,out IEnumerable temp)?temp:new List();
if(vals.Any())
{
票证=VAL.First();
}
返回response.Content.ReadAsStringAsync().Result;
}
}