Comparteix a través de


Inicio rápido: Ejemplo de API web (C#)

En este inicio rápido, creará una aplicación de consola que se conecta al entorno de Microsoft Dataverse e invoca una función sencilla. Una vez que comprenda la funcionalidad básica que se describe aquí, puede explorar otras operaciones de API web, como crear, recuperar, actualizar y eliminar filas de tabla de Dataverse.

Este programa autentica y utiliza HttpClient para enviar una solicitud GET a la función WhoAmI. Esta función recupera información sobre el usuario de Dataverse que ha iniciado sesión. La respuesta es un WhoAmIResponse ComplexType. A continuación, el programa mostrará el valor de propiedad UserId obtenido de la respuesta.

Puede encontrar la solución completa de Visual Studio para este proyecto de .NET 10 en el repositorio PowerApps-Samples en dataverse/webapi/C#-NETx/QuickStart.

Requisitos previos

  • Visual Studio 2026 o posterior
  • Conexión a Internet
  • Cuenta de usuario válida para un entorno de Dataverse
  • Dirección URL al entorno de Dataverse con el que quiere conectarse
  • Comprensión básica de lenguaje C#

Nota

Para autenticarse debe tener una aplicación registrada en Microsoft Entra ID. Este ejemplo de inicio rápido proporciona un valor clientid de registro de aplicación que puede usar para ejecutar el código de ejemplo publicado por Microsoft. Sin embargo, para sus propias aplicaciones personalizadas, debe registrar sus aplicaciones con AD. Más información: Tutorial: Registrar una aplicación con Microsoft Entra ID

Crear proyecto de Visual Studio

  1. Inicie Visual Studio 2026 y seleccione Crear un nuevo proyecto.

    Crear un proyecto

  2. Crear un nuevo proyecto de aplicación de consola.

    Nuevo proyecto de aplicación de consola

  3. Configure el proyecto estableciendo una Ubicación y un Nombre de proyecto.

    Configurar el proyecto

  4. Configure el proyecto seleccionando .NET 10.0 (Soporte técnico a largo plazo) y No usar instrucciones de nivel superior. Luego seleccione Crear.

    Diálogo de información adicional.

  5. En el Explorador de soluciones haga clic con el botón secundario en el proyecto que ha creado y seleccione Administrar paquetes de NuGet... en el menú contextual. NuGet le permite incluir los ensamblajes necesarios en su proyecto.

  6. Busque el paquete Microsoft Authentication Library (MSAL) NuGet con el nombre Microsoft.Identity.Client, selecciónelo y, luego, elija Instalar.

    Instale el paquete de autenticación MSAL

    Nota

    Se le pedirá que acepte los términos de licencia antes de la instalación. Seleccione Acepto en el diálogo Aceptación de licencia.

Edite Program.cs

Siga los próximos pasos para agregar código para el programa principal.

  1. Reemplace el contenido completo de Program.cs con el siguiente código.

    using Microsoft.Identity.Client;  // Microsoft Authentication Library (MSAL)
    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Text.Json;
    using System.Threading.Tasks;
    
    namespace PowerApps.Samples
    {
       /// <summary>
       /// Demonstrates Azure authentication and execution of a Dataverse Web API function.
       /// </summary>
       class Program
       {
          static async Task Main()
          {
                // TODO Specify the Dataverse environment name to connect with.
                // See https://learn.microsoft.com/power-apps/developer/data-platform/webapi/compose-http-requests-handle-errors#web-api-url-and-versions
                string resource = "https://<env-name>.api.<region>.dynamics.com";
    
                // Microsoft Entra ID app registration shared by all Power App samples.
                var clientId = "51f81489-12ee-4a9e-aaae-a2591f45987d";
                var redirectUri = "http://localhost"; // Loopback for the interactive login.
    
                // For your custom apps, you will need to register them with Microsoft Entra ID yourself.
                // See https://docs.microsoft.com/powerapps/developer/data-platform/walkthrough-register-app-azure-active-directory
    
                #region Authentication
    
                var authBuilder = PublicClientApplicationBuilder.Create(clientId)
                               .WithAuthority(AadAuthorityAudience.AzureAdMultipleOrgs)
                               .WithRedirectUri(redirectUri)
                               .Build();
                var scope = resource + "/user_impersonation";
                string[] scopes = { scope };
    
                AuthenticationResult token =
                   await authBuilder.AcquireTokenInteractive(scopes).ExecuteAsync();
                #endregion Authentication
    
                #region Client configuration
    
                var client = new HttpClient
                {
                   // See https://docs.microsoft.com/powerapps/developer/data-platform/webapi/compose-http-requests-handle-errors#web-api-url-and-versions
                   BaseAddress = new Uri(resource + "/api/data/v9.2/"),
                   Timeout = new TimeSpan(0, 2, 0)    // Standard two minute timeout on web service calls.
                };
    
                // Default headers for each Web API call.
                // See https://docs.microsoft.com/powerapps/developer/data-platform/webapi/compose-http-requests-handle-errors#http-headers
                HttpRequestHeaders headers = client.DefaultRequestHeaders;
                headers.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
                headers.Add("OData-MaxVersion", "4.0");
                headers.Add("OData-Version", "4.0");
                headers.Accept.Add(
                   new MediaTypeWithQualityHeaderValue("application/json"));
                #endregion Client configuration
    
                #region Web API call
    
                // Invoke the Web API 'WhoAmI' unbound function.
                // See https://docs.microsoft.com/powerapps/developer/data-platform/webapi/compose-http-requests-handle-errors
                // See https://docs.microsoft.com/powerapps/developer/data-platform/webapi/use-web-api-functions#unbound-functions
                var response = await client.GetAsync("WhoAmI");
    
                if (response.IsSuccessStatusCode)
                {
                   // Parse the JSON formatted service response (WhoAmIResponse) to obtain the user ID value.
                   // See https://learn.microsoft.com/power-apps/developer/data-platform/webapi/reference/whoamiresponse
                   Guid userId = new();
    
                   string jsonContent = await response.Content.ReadAsStringAsync();
    
                   // Using System.Text.Json
                   using (JsonDocument doc = JsonDocument.Parse(jsonContent))
                   {
                      JsonElement root = doc.RootElement;
                      JsonElement userIdElement = root.GetProperty("UserId");
                      userId = userIdElement.GetGuid();
                   }
    
                   // Alternate code, but requires that the WhoAmIResponse class be defined (see below).
                   // WhoAmIResponse whoAmIresponse = JsonSerializer.Deserialize<WhoAmIResponse>(jsonContent);
                   // userId = whoAmIresponse.UserId;
    
                   Console.WriteLine($"Your user ID is {userId}");
                }
                else
                {
                   Console.WriteLine("Web API call failed");
                   Console.WriteLine("Reason: " + response.ReasonPhrase);
                }
                #endregion Web API call
          }
       }
    
       /// <summary>
       /// WhoAmIResponse class definition 
       /// </summary>
       /// <remarks>To be used for JSON deserialization.</remarks>
       /// <see cref="https://learn.microsoft.com/power-apps/developer/data-platform/webapi/reference/whoamiresponse"/>
       public class WhoAmIResponse
       {
          public Guid BusinessUnitId { get; set; }
          public Guid UserId { get; set; }
          public Guid OrganizationId { get; set; }
       }
    }
    
  2. Justo debajo del comentario TODO del código anterior, reemplace el resource valor de la variable por la dirección URL real del entorno de prueba de Dataverse. Para encontrar el valor de URL para su entorno de prueba, siga estos pasos:

    1. Vaya a Power Apps.
    2. Seleccione el icono de entornos (a la derecha del campo de búsqueda) y elija un entorno de prueba.
    3. Seleccione el icono de configuración Botón Configuración. y elija Recursos de desarrollador.
    4. Copie la dirección URL del punto de conexión de la API web desde https: hasta .com sin incluir el final /api/data/v9.2.
    5. Reemplace el valor de la cadena de recursos en el código del programa con ese valor de URL del punto de conexión. Por ejemplo:

      string resource = "https://contoso.api.crm.dynamics.com";

Ejecutar el programa

  1. Presione F5 para compilar y ejecutar el programa.

    Se abre una ventana del navegador y le pide que elija una cuenta. Elija la cuenta que utiliza para acceder a su entorno Dataverse . Si esa cuenta no aparece en la lista, seleccione Usar otra cuenta.

    Una vez que seleccione la cuenta, escriba la contraseña y seleccione Iniciar sesión.

  2. Mire la ventana de la aplicación de la consola. El resultado deberá ser ahora similar a esto:

    Your user ID is 22cc22cc-dd33-ee44-ff55-66aa66aa66aa
    
    C:\projects\webapi-quickstart\bin\Debug\net10.0\webapi-quickstart.exe (process 21524) exited with code 0.
    To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
    Press any key to close this window . . .
    

Enhorabuena.

Te has conectado a la API web.

En este ejemplo de inicio rápido se muestra un enfoque sencillo para crear un proyecto de Visual Studio sin ningún control de excepciones ni método para actualizar el token de acceso. Este enfoque es suficiente para comprobar que puede conectarse y probar diferentes operaciones.

Código de ejemplo de .NET

Para obtener un ejemplo más completo que muestre los patrones de diseño recomendados, consulte la biblioteca de clases WebAPIService (C#). Demuestra:

  • Administrar los límites de la API de protección del servicio de Dataverse con la resiliencia de .NET y la biblioteca de manejo de fallas transitorias Polly.
  • Administración de httpClient en .NET mediante IHttpClientFactory.
  • Usar datos de configuración para gestionar el comportamiento del cliente.
  • Gestionar los errores devueltos por la API web de Dataverse.
  • Un patrón de reutilización de código mediante:
    • Creando clases que heredan de HttpRequestMessage y HttpResponseMessage.
    • Métodos que usan esas clases.
    • Un patrón modular para agregar nuevas capacidades según sea necesario. The [Web API Data operations Samples (C#)](web-api-samples-csharp.md) use theBiblioteca de clases de WebAPIService.

Pasos siguientes

Pruebe a crear una aplicación web.

Aprender más acerca de las Capacidades de API web de Dataverse mediante la comprensión de los documentos de servicio.

Obtenga más información sobre las funcionalidades de api web de Dataverse mediante la ejecución y el estudio del código de ejemplo.