【发布时间】:2014-02-10 16:49:16
【问题描述】:
有人可以告诉我如何从 MVC 4 Web 应用程序使用外部 REST 服务吗?这些服务依赖于使用基于 64 位编码的凭证的初始调用,然后返回一个用于进一步 Web 服务查询的令牌。
我找不到关于如何做这种事情的简单入门,有人可以帮忙吗? 我在经典的 ASP 和 JQuery 中完成了所有这些工作,但需要转移到 MVC 4 Web 应用程序。
【问题讨论】:
标签: asp.net-mvc-4 rest
有人可以告诉我如何从 MVC 4 Web 应用程序使用外部 REST 服务吗?这些服务依赖于使用基于 64 位编码的凭证的初始调用,然后返回一个用于进一步 Web 服务查询的令牌。
我找不到关于如何做这种事情的简单入门,有人可以帮忙吗? 我在经典的 ASP 和 JQuery 中完成了所有这些工作,但需要转移到 MVC 4 Web 应用程序。
【问题讨论】:
标签: asp.net-mvc-4 rest
您可以使用HttpClient 类。以下是如何发送 GET 请求并使用基本身份验证的示例:
var client = new HttpClient();
client.BaseAddress = new Uri("http://foo.com");
var buffer = Encoding.ASCII.GetBytes("john:secret");
var authHeader = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(buffer));
client.DefaultRequestHeaders.Authorization = authHeader;
var response = client.GetAsync("/api/authenticate").Result;
if (response.IsSuccessStatusCode)
{
string responseBody = response.Content.ReadAsStringAsync().Result;
}
一旦您检索到访问令牌,您就可以进行经过身份验证的调用:
var client = new HttpClient();
client.BaseAddress = new Uri("http://foo.com");
string accessToken = ...
var authHeader = new AuthenticationHeaderValue("Bearar", accessToken);
client.DefaultRequestHeaders.Authorization = authHeader;
var response = client.GetAsync("/api/bar").Result;
if (response.IsSuccessStatusCode)
{
string responseBody = response.Content.ReadAsStringAsync().Result;
}
【讨论】:
response.Content 上使用 ReadAsAsync<T> 方法,该方法会自动将 JSON 解析为您定义的类。作为替代方案,您可以手动解析使用 JSON 序列化程序获得的字符串响应,以便提取您在此 JSON 中查找的信息。