Bagikan melalui


Aplikasi desktop yang memanggil API web: Memanggil API web

Setelah memiliki token, Anda dapat memanggil API web yang dilindungi. Anda biasanya memanggil API hilir dari pengontrol atau halaman aplikasi web Anda.

Memanggil API web yang dilindungi

Memanggil API web yang dilindungi tergantung pada bahasa dan kerangka kerja pilihan Anda:

Saat menggunakan Microsoft.Identity.Web, Anda memiliki tiga opsi penggunaan untuk memanggil API:

Opsi 1: Panggil Microsoft Graph dengan SDK

Dalam skenario ini, Anda memanggil Microsoft Graph dengan menambahkan paket NuGet Microsoft.Identity.Web.GraphServiceClient dan termasuk .AddMicrosoftGraph() dalam Startup.cs seperti yang ditentukan dalam konfigurasi Kode. Anda kemudian dapat langsung menyuntikkan ke GraphServiceClient pengontrol atau konstruktor halaman Anda untuk menggunakannya dalam tindakan. Contoh halaman Razor berikut ini menampilkan foto pengguna yang masuk.

[Authorize]
[AuthorizeForScopes(Scopes = new[] { "user.read" })]
public class IndexModel : PageModel
{
 private readonly GraphServiceClient _graphServiceClient;

 public IndexModel(GraphServiceClient graphServiceClient)
 {
    _graphServiceClient = graphServiceClient;
 }

 public async Task OnGet()
 {
  var user = await _graphServiceClient.Me.GetAsync();
  try
  {
   using (var photoStream = await _graphServiceClient.Me.Photo.Content.GetAsync())
   {
    byte[] photoByte = ((MemoryStream)photoStream).ToArray();
    ViewData["photo"] = Convert.ToBase64String(photoByte);
   }
   ViewData["name"] = user.DisplayName;
  }
  catch (Exception)
  {
   ViewData["photo"] = null;
  }
 }
}

Untuk sampel lengkap, lihat aplikasi web ASP.NET Core yang memanggil Microsoft Graph.

Opsi 2: Panggil API web hilir dengan kelas pembantu

Anda ingin memanggil API web selain Microsoft Graph. Dalam hal ini, Anda menambahkan AddDownstreamApiStartup.cs seperti yang ditentukan dalam konfigurasi Kode, dan Anda dapat langsung menyuntikkan IDownstreamApi layanan di pengontrol atau konstruktor halaman Anda dan menggunakannya dalam tindakan:

[Authorize]
[AuthorizeForScopes(ScopeKeySection = "TodoList:Scopes")]
public class TodoListController : Controller
{
  private IDownstreamApi _downstreamApi;
  private const string ServiceName = "TodoList";

  public TodoListController(IDownstreamApi downstreamApi)
  {
    _downstreamApi = downstreamApi;
  }

  public async Task<ActionResult> Details(int id)
  {
    var value = await _downstreamApi.CallApiForUserAsync(
      ServiceName,
      options =>
      {
        options.RelativePath = $"me";
      });
      return View(value);
  }
}

Metode CallWebApiForUserAsync ini juga memiliki pengambilalihan generik dengan jenis kuat yang memungkinkan Anda untuk langsung menerima objek. Misalnya, metode berikut menerima instans Todo, yang merupakan representasi JSON dengan jenis sangat kuat yang dikembalikan oleh API web.

    // GET: TodoList/Details/5
    public async Task<ActionResult> Details(int id)
    {
        var value = await _downstreamApi.CallApiForUserAsync<object, Todo>(
            ServiceName,
            null,
            options =>
            {
                options.HttpMethod = HttpMethod.Get;
                options.RelativePath = $"api/todolist/{id}";
            });
        return View(value);
    }

Untuk sampel lengkap, lihat aplikasi web ASP.NET Core yang memanggil API

Opsi 3: Panggil API web hilir tanpa kelas pembantu

Jika Anda telah memutuskan untuk mendapatkan token secara manual menggunakan layanan IAuthorizationHeaderProvider, Anda sekarang perlu menggunakan token. Dalam hal ini, kode berikut melanjutkan kode contoh yang ditampilkan di Aplikasi web yang memanggil API web: Memperoleh token untuk aplikasi. Kode dipanggil dalam tindakan pengontrol aplikasi web.

Setelah Anda mendapatkan token, gunakan sebagai token pembawa untuk memanggil API hilir, dalam hal ini Microsoft Graph.

public async Task<IActionResult> Profile()
{
  // Acquire the access token.
  string[] scopes = new string[]{"user.read"};
  string authorizationHeader = await IAuthorizationHeaderProvider.GetAuthorizationHeaderForUserAsync(scopes);

  // Use the access token to call a protected web API.
  HttpClient httpClient = new HttpClient();
  client.DefaultRequestHeaders.Add("Authorization", authorizationHeader);

  var response = await httpClient.GetAsync($"{webOptions.GraphApiUrl}/beta/me");

  if (response.StatusCode == HttpStatusCode.OK)
  {
    var content = await response.Content.ReadAsStringAsync();

    dynamic me = JsonConvert.DeserializeObject(content);
    ViewData["Me"] = me;
  }

  return View();
}

Catatan

Anda dapat menggunakan prinsip yang sama untuk memanggil API web apa pun.

Sebagian besar API web Azure menyediakan SDK yang menyederhanakan pemanggilan API seperti halnya untuk Microsoft Graph.

Langkah berikutnya

  • Pelajari selengkapnya dengan membangun aplikasi web ASP.NET Core yang memasukkan pengguna dalam seri tutorial multi-bagian berikut

  • Menjelajahi sampel aplikasi web platform identitas Microsoft