Udostępnij za pośrednictwem


Aplikacja internetowa, która wywołuje interfejsy API sieci Web: wywoływanie interfejsu API sieci Web

Dotyczy: Dzierżawcy siły roboczej Biały okrąg z szarym symbolem X. dzierżawcy zewnętrzni (White circle with a gray X symbol.dowiedz się więcej)

Teraz, gdy masz token, możesz wywołać chroniony internetowy interfejs API. Zazwyczaj wywołujesz podrzędny interfejs API z kontrolera lub stron aplikacji webowej.

Wywołaj chroniony internetowy interfejs API

Wywoływanie chronionego internetowego interfejsu API zależy od wybranego języka i platformy:

W przypadku korzystania z aplikacji Microsoft.Identity.Web dostępne są trzy opcje użycia do wywoływania interfejsu API:

Opcja 1. Wywoływanie programu Microsoft Graph za pomocą zestawu SDK

W tym scenariuszu wywołujesz Microsoft Graph, dodając pakiet NuGet Microsoft.Identity.Web.GraphServiceClient i uwzględniając .AddMicrosoftGraph() w Startup.cs, zgodnie z sekcją Konfiguracja kodu. Następnie możesz bezpośrednio wstrzyknąć element GraphServiceClient do swojego kontrolera lub konstruktora strony, aby wykorzystać go w działaniach. Poniższa przykładowa strona Razor wyświetla zdjęcie zalogowanego użytkownika.

[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;
  }
 }
}

Aby uzyskać pełny przykład, zobacz aplikację internetową ASP.NET Core, która wywołuje Microsoft Graph.

Opcja 2. Wywoływanie podrzędnego internetowego interfejsu API za pomocą klasy pomocniczej

Chcesz wywołać internetowy interfejs API inny niż Microsoft Graph. Można w takim przypadku dodać AddDownstreamApi w Startup.cs, jak określono w Konfiguracji kodu, i można bezpośrednio wstrzyknąć usługę IDownstreamApi w kontrolerze lub konstruktorze strony i użyć jej w akcjach:

[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);
  }
}

Dodatkowo, komponent CallWebApiForUserAsync posiada silnie typizowane generyczne przesłonięcia, które umożliwiają bezpośrednie pobieranie obiektu. Na przykład następująca metoda odbiera instancję Todo, która jest silnie typizowaną reprezentacją kodu JSON zwracanego przez API sieciowe.

    // 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);
    }

Aby zobaczyć pełny przykład, zajrzyj do aplikacji internetowej ASP.NET Core, która wywołuje interfejs API.

Opcja 3. Wywoływanie podrzędnego internetowego interfejsu API bez klasy pomocniczej

Zdecydowałeś się ręcznie uzyskać token przy użyciu usługi IAuthorizationHeaderProvider, a teraz musisz użyć tego tokenu. W takim przypadku poniższy kod kontynuuje przykładowy kod pokazany w aplikacji internetowej, która wywołuje internetowe interfejsy API: Uzyskiwanie tokenu dla aplikacji. Kod jest wywoływany w akcjach kontrolerów aplikacji internetowej.

Po uzyskaniu tokenu użyj go jako tokenu elementu nośnego, aby wywołać podrzędny interfejs API, w tym przypadku program 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();
}

Uwaga

Tę samą zasadę można użyć do wywoływania dowolnego internetowego interfejsu API.

Większość internetowych interfejsów API platformy Azure udostępnia zestaw SDK, który upraszcza wywoływanie interfejsu API, tak jak w przypadku programu Microsoft Graph.

Następne kroki

  • Dowiedz się więcej, tworząc aplikację webową ASP.NET Core, która pozwala logować się użytkownikom w poniższej wieloczęściowej serii samouczków

  • Odkryj przykłady aplikacji internetowych na platformie tożsamości Microsoft