Aracılığıyla paylaş


Web API'lerini çağıran bir web uygulaması: Web API'sini çağırma

Artık bir belirteciniz olduğuna göre korumalı bir web API'sini çağırabilirsiniz. Genellikle web uygulamanızın denetleyicisinden veya sayfalarından aşağı akış API'sini çağırırsınız.

Korumalı bir web API'si çağırma

Korumalı bir web API'sini çağırmak dilinize ve seçtiğiniz çerçeveye bağlıdır:

Microsoft.Identity.Web kullandığınızda, API çağırmak için üç kullanım seçeneğiniz vardır:

1. Seçenek: SDK ile Microsoft Graph'ı çağırma

Bu senaryoda, Microsoft.Identity.Web.GraphServiceClient NuGet paketini ekleyerek ve Kod yapılandırmasında belirtildiği gibi Startup.cs ekleyerek .AddMicrosoftGraph() Microsoft Graph'ı çağırırsınız. Daha sonra doğrudan denetleyicinize veya sayfa oluşturucunuza ekleyebilir GraphServiceClient ve bunu eylemlerde kullanabilirsiniz. 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;
  }
 }
}

Tam örnek için bkz . Microsoft Graph'ı çağıran ASP.NET Core web uygulaması.

Seçenek 2: Yardımcı sınıfıyla aşağı akış web API'sini çağırma

Microsoft Graph dışında bir web API'sini çağırmak istiyorsunuz. Bu durumda, Kod yapılandırmasında belirtildiği gibi Startup.cs eklersiniz AddDownstreamApi ve doğrudan denetleyicinize veya sayfa oluşturucunuza bir IDownstreamApi hizmet ekleyebilir ve bunu eylemlerde kullanabilirsiniz:

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

ayrıca CallWebApiForUserAsync , doğrudan bir nesne almanıza olanak tanıyan kesin olarak belirlenmiş genel geçersiz kılmalara 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 örneği alır.

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

Tam örnek için bkz . API çağıran ASP.NET Core web uygulaması

Seçenek 3: Yardımcı sınıfı olmadan aşağı akış web API'sini çağırma

Hizmeti kullanarak IAuthorizationHeaderProvider el ile belirteç almaya karar verdiniz ve şimdi belirteci kullanmanız gerekiyor. Bu durumda, aşağıdaki kod Web API'lerini çağıran bir web uygulamasında gösterilen örnek koda devam eder: Uygulama için belirteç alma. Kod, web uygulaması denetleyicilerinin eylemlerinde çağrılır.

Belirteci aldıktan sonra, aşağı akış API'sini çağırmak için taşıyıcı belirteç olarak kullanın( bu örnekte 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();
}

Not

Herhangi bir web API'sini çağırmak için aynı ilkeyi kullanabilirsiniz.

Azure web API'lerinin çoğu, Microsoft Graph'ta olduğu gibi API'yi çağırmayı kolaylaştıran bir SDK sağlar.

Sonraki adımlar