Megosztás a következőn keresztül:


Egy API, amely webes API-kat hív meg: API hívása

A következőkre vonatkozik: Zöld kör fehér pipa szimbólummal, amely a következő tartalmat jelzi a munkaerő-bérlőkre. Munkaerő-bérlők (további információ)

Miután rendelkezik egy jogkivonattal, meghívhat egy védett webes API-t. Általában a webes API vezérlőjétől vagy lapjaitól hívhatja meg az alsóbb rétegbeli API-kat.

Vezérlőkód

A Microsoft.Identity.Web használata esetén három használati forgatókönyve van:

1. lehetőség: A Microsoft Graph meghívása az SDK-val

Ebben a forgatókönyvben hozzáadta a Microsoft.Identity.Web.GraphServiceClient NuGet-csomagot, és a .AddMicrosoftGraph() elemet belehelyezte a Startup.cs fájlba úgy, ahogyan azt a Kód konfigurációja megadta. Ezután közvetlenül beillesztheti a GraphServiceClient elemet a vezérlőbe vagy az oldal konstruktorába, hogy azt a műveletekhez használhassa. Az alábbi Razor-példalap a bejelentkezett felhasználó fényképét jeleníti meg.

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

2. lehetőség: Alsóbb rétegbeli webes API meghívása a segédosztálysal

Ebben a forgatókönyvben hozzáadta a(z) .AddDownstreamApi() elemet a Startup.cs-hez, ahogyan a Kód konfigurációja megadta, és közvetlenül injektálhat egy IDownstreamWebApi szolgáltatást a vezérlő vagy a lap konstruktorába, és használhatja azt a műveletek során.

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

     public TodoListController(IDownstreamWebApi downstreamWebApi)
     {
         _downstreamWebApi = downstreamWebApi;
     }

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

A CallApiForUserAsync metódus olyan erősen gépelt általános felülbírálásokkal is rendelkezik, amelyek lehetővé teszik az objektumok közvetlen fogadását. A következő metódus például kapott egy példányt Todo , amely a webes API által visszaadott JSON erősen gépelt ábrázolása.

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

3. lehetőség: Alsóbb rétegbeli webes API meghívása segédosztály nélkül

Ha úgy döntött, hogy lekér egy engedélyezési fejlécet az IAuthorizationHeaderProvider interfész használatával, a következő kód folytatja a webes API-kat hívó webes API-kban látható példakódot: Jogkivonat beszerzése az alkalmazáshoz. A kód meghívása az API-vezérlők műveleteiben történik. Egy todolist nevű alsóbb rétegbeli API-t hív meg.

A jogkivonat beszerzése után használja tulajdonosi jogkivonatként az alsóbb rétegbeli API meghívásához.

private async Task CallTodoListService(string accessToken)
{
  // After the token has been returned by Microsoft.Identity.Web, add it to the HTTP authorization header before making the call to access the todolist service.
  authorizationHeader = await authorizationHeaderProvider.GetAuthorizationHeaderForUserAsync(scopes);
  _httpClient.DefaultRequestHeaders["Authorization"] = authorizationHeader;

  // Call the todolist service.
  HttpResponseMessage response = await _httpClient.GetAsync(TodoListBaseAddress + "/api/todolist");
  // ...
}

Következő lépések