C# 如何使用c在content server中使用api/v1/auth method=post获取OTCSticket#

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

以下是我使用postman进行的API调用,并在响应正文中获取一张票证(屏幕截图):

我无法在C#中的HttpWebRequest响应中获取票证。请参见下面的小样本代码:

C#代码

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);
}
其中as
statuscode=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;
}
}