HttpClient请求内容

时间:2017-11-29 23:37:26

标签: c# httpclient adfs

我正在尝试使用HttpClient从AD FS获取令牌,然后登录SharePoint站点。我已经完成了第一部分,我可以成功地将凭据发布到ADFS并在响应中获取令牌。我正在努力解决第二部分问题。 AD FS处理此问题的方法是在登录后以200(OK)回复。响应的主体具有隐藏的形式,其中包含令牌和目标URL。在浏览器中,表单是使用JavaScript自动提交的。但HttpClient不执行JS,因此进程停止。

我的问题:是否可以将.Content.ReadAsStringAsync()添加到另一个帖子请求中?我可以使用HTML Agility Pack来提取表单值,然后将它们作为键/值数组添加到新请求中(这就是我将我的凭据发布到ADFS的方式),但我想知道是否有更简单的方法,因为我已经在AD FS的回复中提供了表单内容。

谢谢!

更新:我最终使用HTML Agility Pack开始了这条路线。

// load into HTML Agility Pack
HtmlNode.ElementsFlags.Remove("form");
var adfsPage = new HtmlDocument();
adfsPage.LoadHtml(formContent);

HtmlNode formNode = adfsPage.DocumentNode.SelectNodes("//form")[0];
// loop through each input and add it to the key/value array
foreach (HtmlNode node in formNode.Elements("input"))
  {
    HtmlAttribute value = node.Attributes["value"];
    HtmlAttribute name = node.Attributes["name"];
    if (value != null)
      {
        form.Add(new KeyValuePair<string, string>(name.Value, value.Value));
      }
      Console.WriteLine("Key: " + name.Value);
      Console.WriteLine("Value: " + value.Value);
  }

0 个答案:

没有答案