Web API'lerini çağıran bir web API'si: API çağırma
Belirteciniz olduktan sonra korumalı bir web API'sini çağırabilirsiniz. Aşağı akış API'lerini genellikle web API'nizin denetleyicisinden veya sayfalarından çağırırsınız.
Denetleyici kodu
Microsoft.Identity.Web kullandığınızda üç kullanım senaryonuz vardır:
- 1. Seçenek: SDK ile Microsoft Graph'ı çağırma
- Seçenek 2: Yardımcı sınıfıyla aşağı akış web API'sini çağırma
- Seçenek 3: Yardımcı sınıfı olmadan aşağı akış web API'sini çağırma
1. Seçenek: SDK ile Microsoft Graph'ı çağırma
Bu senaryoda, Microsoft.Identity.Web.GraphServiceClient NuGet paketini eklediniz ve Kod yapılandırmasında belirtildiği gibi Startup.cs'a eklediniz .AddMicrosoftGraph()
ve doğrudan eylemlerde kullanmak üzere denetleyicinize veya sayfa oluşturucunuza öğesini ekleyebilirsiniz.GraphServiceClient
Aşağıdaki örnek Razor sayfasında oturum açmış kullanıcının fotoğrafı görüntülenir.
[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;
}
}
}
Seçenek 2: Yardımcı sınıfıyla aşağı akış web API'sini çağırma
Bu senaryoda, Kod yapılandırmasında belirtildiği gibi Startup.cs eklediniz .AddDownstreamApi()
ve doğrudan denetleyicinize veya sayfa oluşturucunuza bir IDownstreamWebApi
hizmet ekleyebilir ve eylemlerde kullanabilirsiniz:
[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);
}
yöntemi CallApiForUserAsync
, doğrudan bir nesne almanıza olanak tanıyan kesin olarak belirlenmiş genel geçersiz kılmalara da sahiptir. Örneğin, aşağıdaki yöntem, web API'sinin döndürdiği JSON'un kesin olarak belirlenmiş bir gösterimi olan bir Todo
örnek aldı.
// 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);
}
Seçenek 3: Yardımcı sınıfı olmadan aşağı akış web API'sini çağırma
Arabirimi kullanarak IAuthorizationHeaderProvider
bir yetkilendirme üst bilgisi almaya karar verdiyseniz, aşağıdaki kod Web API'lerini çağıran bir web API'sinde gösterilen örnek koda devam eder: Uygulama için belirteç alma. Kod, API denetleyicilerinin eylemlerinde çağrılır. Todolist adlı bir aşağı akış API'sini çağırır.
Belirteci aldıktan sonra, aşağı akış API'sini çağırmak için taşıyıcı belirteç olarak kullanın.
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");
// ...
}
Sonraki adımlar
Aşağıdaki çok bölümlü öğretici serisinde kullanıcıların oturumunu kuran bir ASP.NET Core web uygulaması oluşturarak daha fazla bilgi edinin
Microsoft kimlik platformu web API'si örneklerini keşfetme
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin