【问题标题】:Obtaining a token for authentication获取用于身份验证的令牌
【发布时间】:2014-11-12 21:09:34
【问题描述】:

我询问如何设置对服务的调用并得到a great info on HttpClient。然而,虽然那个问题在技术上得到了解答,但我仍然卡住了。

在控制台中,我可以看到我的浏览器向服务发送什么请求以获取授权令牌。但是,当我尝试模仿在我的服务层中构建请求的调用时,我收到以下错误消息。 在这里犯错的可能性非常大。真的不知道谷歌是为了什么......

“状态码:500,ReasonPhrase:'内部服务器错误',版本:1.1,内容:System.Net.Http.StreamContent,标头:\u000d\u000a{\u000d\u000a 传输编码:chunked\u000d\u000a连接:keep-alive\u000d\u000a 日期:2014 年 11 月 12 日星期三 21:00:34 GMT\u000d\u000a 设置 Cookie:lang=\"en\";Max-Age=31622400;expires=Fri, 13- 2015 年 11 月 21:00:33 GMT;路径=/;版本=\"1\"\u000d\u000a 服务器:nginx/1.4.1\u000d\u000a 服务器:(Ubuntu)\u000d\u000a 内容类型:文本/plain; charset=UTF-8\u000d\u000a}"

调用本身如下所示。

using (HttpClient client = new HttpClient())
{
  Task<HttpResponseMessage> message 
    = client.PostAsync(urlToken, new StringContent(credentials));
  message.Wait();
  result = message.Result.ToString();
}

【问题讨论】:

  • 500 错误表示服务出现问题。检查您的网络服务器日志和事件查看器,看看那里是否记录了任何内容。

标签: c# wcf authentication httpclient token


【解决方案1】:

正如您在链接帖子中接受的答案中发布的那样,您需要阅读回复的内容。直接在响应上调用 ToString() 不会向您显示实际错误。

将您的代码更改为:

using (HttpClient client = new HttpClient())
{
  var response = await client.PostAsync(url, new StringContent(credentials));
  result = await response.Content.ReadAsStringAsync();
}

一旦您可以看到来自服务器的实际响应消息,您应该能够弄清楚下一步该做什么。

【讨论】:

  • 我没有从我的智能感知中获得 Content 属性。此外,await 要求整个方法是异步的。但我需要它“同步”执行。这就是我使用 message.Wait() 的原因。我完全不在这儿了吗?
  • 您看不到.Content,因为该属性存在于HttpResponseMessage,而不是Task。你应该在message.Result 上看到它。至于你关于完全关闭的问题,我不能说。您提供的上下文太少而无法知道。话虽如此,做你正在做的事情通常是一种不好的做法。请参阅@stephencleary 的博文on the subject
猜你喜欢
  • 2015-06-21
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
  • 2021-01-25
  • 2016-01-23
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多