Webové rozhraní API, které volá webová rozhraní API: Volání rozhraní API
Jakmile budete mít token, můžete volat chráněné webové rozhraní API. Podřízená rozhraní API obvykle voláte z kontroleru nebo stránek webového rozhraní API.
Kód kontroleru
Pokud používáte Microsoft.Identity.Web, máte tři scénáře použití:
- Možnost 1: Volání Microsoft Graphu pomocí sady SDK
- Možnost 2: Volání podřízeného webového rozhraní API s pomocnou třídou
- Možnost 3: Volání podřízeného webového rozhraní API bez pomocné třídy
Možnost 1: Volání Microsoft Graphu pomocí sady SDK
V tomto scénáři jste přidali balíček NuGet Microsoft.Identity.Web.GraphServiceClient a přidali .AddMicrosoftGraph()
jste do Startup.cs , jak je uvedeno v konfiguraci kódu, a můžete přímo vložit GraphServiceClient
do kontroleru nebo konstruktoru stránky pro použití v akcích. Následující příklad stránky Razor Page zobrazuje fotku přihlášeného uživatele.
[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;
}
}
}
Možnost 2: Volání podřízeného webového rozhraní API s pomocnou třídou
V tomto scénáři jste přidali .AddDownstreamApi()
Startup.cs, jak je uvedeno v konfiguraci kódu, a můžete přímo vložit IDownstreamWebApi
službu do konstruktoru kontroleru nebo stránky a použít ji v akcích:
[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);
}
Metoda CallApiForUserAsync
má také přepsání silného typu, které umožňují přímo přijímat objekt. Například následující metoda přijala Todo
instanci, což je reprezentace JSON se silným typem vráceného webovým rozhraním API.
// 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);
}
Možnost 3: Volání podřízeného webového rozhraní API bez pomocné třídy
Pokud jste se rozhodli získat autorizační hlavičku pomocí IAuthorizationHeaderProvider
rozhraní, následující kód pokračuje v ukázkovém kódu zobrazeném ve webovém rozhraní API, které volá webová rozhraní API: Získání tokenu pro aplikaci. Kód se volá v akcích kontrolerů rozhraní API. Volá podřízené rozhraní API s názvem todolist.
Po získání tokenu ho použijte jako nosný token k volání podřízeného rozhraní API.
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");
// ...
}