Webová aplikace, která volá webová rozhraní API: Volání webového rozhraní API
Teď, když máte token, můžete volat chráněné webové rozhraní API. Obvykle voláte podřízené rozhraní API z kontroleru nebo stránek vaší webové aplikace.
Volání chráněného webového rozhraní API
Volání chráněného webového rozhraní API závisí na zvoleném jazyce a rozhraní:
Pokud používáte Microsoft.Identity.Web, máte tři možnosti použití pro volání rozhraní API:
- Možnost 1: Volání Microsoft Graphu pomocí sady Microsoft Graph 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 zavoláte Microsoft Graph přidáním balíčku NuGet Microsoft.Identity.Web.GraphServiceClient a zahrnutím .AddMicrosoftGraph()
do Startup.cs , jak je uvedeno v konfiguraci kódu. Potom můžete přímo vložit GraphServiceClient
do kontroleru nebo konstruktoru stránky, který se použije 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;
}
}
}
Úplnou ukázku najdete v ASP.NET webové aplikaci Core, která volá Microsoft Graph.
Možnost 2: Volání podřízeného webového rozhraní API s pomocnou třídou
Chcete volat jiné webové rozhraní API než Microsoft Graph. V takovém případě přidáte AddDownstreamApi
Startup.cs, jak je uvedeno v konfiguraci kódu, a můžete přímo vložit IDownstreamApi
službu do kontroleru nebo konstruktoru stránky a použít ji v akcích:
[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);
}
}
Obsahuje CallWebApiForUserAsync
také obecné přepsání silného typu, které umožňují přímo přijímat objekt. Například následující metoda obdrží Todo
instanci, což je silné vyjádření JSON vrácené webovým rozhraním API.
// 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);
}
Úplnou ukázku najdete v tématu ASP.NET Core webovou aplikaci, která volá rozhraní API.
Možnost 3: Volání podřízeného webového rozhraní API bez pomocné třídy
Rozhodli jste se token získat ručně pomocí IAuthorizationHeaderProvider
služby a teď potřebujete token použít. V takovém případě následující kód pokračuje v ukázkovém kódu zobrazeném ve webové aplikaci, která volá webová rozhraní API: Získání tokenu pro aplikaci. Kód se volá v akcích kontrolerů webové aplikace.
Po získání tokenu ho použijte jako nosný token k volání podřízeného rozhraní API v tomto případě Microsoft Graphu.
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();
}
Poznámka:
Stejný princip můžete použít k volání libovolného webového rozhraní API.
Většina webových rozhraní API Azure poskytuje sadu SDK, která zjednodušuje volání rozhraní API tak, jak je tomu u Microsoft Graphu.