MS Graph .NET (Cómo Funciona para Desarrolladores)
MS Graph .NET sirve como una herramienta de acceso a datos para interacciones con la API de Microsoft Graph, una pieza central del ecosistema de Azure Active Directory (Azure AD). Microsoft Graph es una puerta de enlace a datos e inteligencia en Microsoft 365. Permite a los desarrolladores acceder, gestionar y analizar datos a través de varios servicios de Microsoft. La biblioteca cliente de Microsoft Graph simplifica este proceso al proporcionar un conjunto de métodos para interactuar fácilmente con la API.
IronPDF es una biblioteca para generar documentos PDF en aplicaciones .NET. Convierte HTML a PDF, lo que lo hace útil para crear informes, facturas y documentación automáticamente. IronPDF funciona bien con aplicaciones .NET, ofreciendo un enfoque sencillo a la generación de PDFs.
Combinar MS Graph .NET e IronPDF permite a los desarrolladores crear aplicaciones que puedan manipular datos de Microsoft 365 y producir documentos PDF. Esta combinación es potente para desarrollar aplicaciones empresariales que requieren datos de los servicios de Microsoft y necesitan presentar esos datos en un formato de documento estandarizado.
Cómo empezar con MS Graph .NET
Configuración de MS Graph .NET en proyectos .NET
Para utilizar MS Graph .NET de manera efectiva, especialmente al trabajar con IDs de usuario en proyectos .NET Core, configurar su proyecto .NET es el primer paso. A continuación se muestran los pasos:
- Abre el Administrador de Paquetes NuGet.
- Busca Microsoft.Graph.
- Instala el paquete Microsoft.Graph.

Este proceso agrega MS Graph .NET a su proyecto. Ahora está listo para empezar a codificar con él.
Un ejemplo de código básico
Supongamos que quieres recuperar la información del perfil del usuario actual. Aquí hay un ejemplo de código simple:
// Required namespaces
using Azure.Identity;
using Microsoft.Graph;
// Defining necessary credentials and scope
var clientId = "Your_Application_Id";
var tenantId = "Your_Tenant_Id";
var clientSecret = "Your_Client_Secret";
var scopes = new[] { "User.Read" };
// Configuring TokenCredentialOptions for Azure Public Cloud
var options = new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
// Authenticating using client credentials
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret, options);
// Creating a new instance of GraphServiceClient
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
// Fetching current user's profile information
var user = await graphClient.Me
.Request()
.GetAsync();
// Printing user's display name
Console.WriteLine($"Hello, {user.DisplayName}!");
// Required namespaces
using Azure.Identity;
using Microsoft.Graph;
// Defining necessary credentials and scope
var clientId = "Your_Application_Id";
var tenantId = "Your_Tenant_Id";
var clientSecret = "Your_Client_Secret";
var scopes = new[] { "User.Read" };
// Configuring TokenCredentialOptions for Azure Public Cloud
var options = new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
// Authenticating using client credentials
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret, options);
// Creating a new instance of GraphServiceClient
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
// Fetching current user's profile information
var user = await graphClient.Me
.Request()
.GetAsync();
// Printing user's display name
Console.WriteLine($"Hello, {user.DisplayName}!");
' Required namespaces
Imports Azure.Identity
Imports Microsoft.Graph
' Defining necessary credentials and scope
Private clientId = "Your_Application_Id"
Private tenantId = "Your_Tenant_Id"
Private clientSecret = "Your_Client_Secret"
Private scopes = { "User.Read" }
' Configuring TokenCredentialOptions for Azure Public Cloud
Private options = New TokenCredentialOptions With {.AuthorityHost = AzureAuthorityHosts.AzurePublicCloud}
' Authenticating using client credentials
Private clientSecretCredential = New ClientSecretCredential(tenantId, clientId, clientSecret, options)
' Creating a new instance of GraphServiceClient
Private graphClient = New GraphServiceClient(clientSecretCredential, scopes)
' Fetching current user's profile information
Private user = await graphClient.Me.Request().GetAsync()
' Printing user's display name
Console.WriteLine($"Hello, {user.DisplayName}!")
Este fragmento de código demuestra cómo crear una nueva instancia de GraphServiceClient, utilizando un secreto de cliente para la autenticación de Azure AD. Utiliza las credenciales del cliente para autenticarse. Luego, recupera el nombre para mostrar del usuario actual. Después de esto, asegúrese de que MS Graph .NET, junto con sus configuraciones de proveedor de autenticación, se agregue a su proyecto.
Características de MS Graph .NET
Recuperar correos electrónicos de usuarios
Para recuperar correos electrónicos del buzón de la cuenta de Microsoft de un usuario, utiliza el permiso Mail.Read. Cómo listar los correos más recientes:
// Retrieving the top 10 messages from the user's mailbox
var messages = await graphClient.Me.Messages
.Request()
.Top(10)
.GetAsync();
// Iterating through the messages and printing their subjects
foreach (var message in messages)
{
Console.WriteLine($"Subject: {message.Subject}");
}
// Retrieving the top 10 messages from the user's mailbox
var messages = await graphClient.Me.Messages
.Request()
.Top(10)
.GetAsync();
// Iterating through the messages and printing their subjects
foreach (var message in messages)
{
Console.WriteLine($"Subject: {message.Subject}");
}
' Retrieving the top 10 messages from the user's mailbox
Dim messages = Await graphClient.Me.Messages.Request().Top(10).GetAsync()
' Iterating through the messages and printing their subjects
For Each message In messages
Console.WriteLine($"Subject: {message.Subject}")
Next message
Este código lista los sujetos de los 10 correos más recientes en la bandeja de entrada del usuario.
Enviar un correo electrónico
Enviar un correo electrónico implica crear un objeto Message y enviarlo:
// Creating a message to be sent
var message = new Message
{
Subject = "Hello from MS Graph .NET",
Body = new ItemBody
{
ContentType = BodyType.Text,
Content = "Hello, this is a test email."
},
ToRecipients = new List<Recipient>()
{
new Recipient
{
EmailAddress = new EmailAddress
{
Address = "recipient@example.com"
}
}
}
};
// Sending the email
await graphClient.Me.SendMail(message, null)
.Request()
.PostAsync();
// Creating a message to be sent
var message = new Message
{
Subject = "Hello from MS Graph .NET",
Body = new ItemBody
{
ContentType = BodyType.Text,
Content = "Hello, this is a test email."
},
ToRecipients = new List<Recipient>()
{
new Recipient
{
EmailAddress = new EmailAddress
{
Address = "recipient@example.com"
}
}
}
};
// Sending the email
await graphClient.Me.SendMail(message, null)
.Request()
.PostAsync();
' Creating a message to be sent
Dim message As New Message With {
.Subject = "Hello from MS Graph .NET",
.Body = New ItemBody With {
.ContentType = BodyType.Text,
.Content = "Hello, this is a test email."
},
.ToRecipients = New List(Of Recipient)() From {
New Recipient With {
.EmailAddress = New EmailAddress With {.Address = "recipient@example.com"}
}
}
}
' Sending the email
Await graphClient.Me.SendMail(message, Nothing).Request().PostAsync()
Esto envía un correo electrónico con un cuerpo de texto simple.
Gestión de eventos del calendario
Para agregar un evento al calendario del usuario:
// Creating a calendar event
var @event = new Event
{
Subject = "Team Meeting",
Body = new ItemBody
{
ContentType = BodyType.Html,
Content = "Discuss project updates."
},
Start = new DateTimeTimeZone
{
DateTime = "2024-04-15T12:00:00",
TimeZone = "Pacific Standard Time"
},
End = new DateTimeTimeZone
{
DateTime = "2024-04-15T14:00:00",
TimeZone = "Pacific Standard Time"
},
Location = new Location
{
DisplayName = "Conference Room 1"
}
};
// Adding the event to the user's calendar
await graphClient.Me.Events
.Request()
.AddAsync(@event);
// Creating a calendar event
var @event = new Event
{
Subject = "Team Meeting",
Body = new ItemBody
{
ContentType = BodyType.Html,
Content = "Discuss project updates."
},
Start = new DateTimeTimeZone
{
DateTime = "2024-04-15T12:00:00",
TimeZone = "Pacific Standard Time"
},
End = new DateTimeTimeZone
{
DateTime = "2024-04-15T14:00:00",
TimeZone = "Pacific Standard Time"
},
Location = new Location
{
DisplayName = "Conference Room 1"
}
};
// Adding the event to the user's calendar
await graphClient.Me.Events
.Request()
.AddAsync(@event);
' Creating a calendar event
Dim [event] As [Event] = New [Event] With {
.Subject = "Team Meeting",
.Body = New ItemBody With {
.ContentType = BodyType.Html,
.Content = "Discuss project updates."
},
.Start = New DateTimeTimeZone With {
.DateTime = "2024-04-15T12:00:00",
.TimeZone = "Pacific Standard Time"
},
.End = New DateTimeTimeZone With {
.DateTime = "2024-04-15T14:00:00",
.TimeZone = "Pacific Standard Time"
},
.Location = New Location With {.DisplayName = "Conference Room 1"}
}
' Adding the event to the user's calendar
Await graphClient.Me.Events.Request().AddAsync([event])
Este código agenda un nuevo evento en el calendario.
Acceso a archivos de OneDrive
Para listar los archivos desde la raíz del OneDrive del usuario:
// Retrieving files from the root OneDrive folder
var files = await graphClient.Me.Drive.Root.Children
.Request()
.GetAsync();
// Printing each file's name
foreach (var file in files)
{
Console.WriteLine(file.Name);
}
// Retrieving files from the root OneDrive folder
var files = await graphClient.Me.Drive.Root.Children
.Request()
.GetAsync();
// Printing each file's name
foreach (var file in files)
{
Console.WriteLine(file.Name);
}
' Retrieving files from the root OneDrive folder
Dim files = Await graphClient.Me.Drive.Root.Children.Request().GetAsync()
' Printing each file's name
For Each file In files
Console.WriteLine(file.Name)
Next file
Este código imprime los nombres de los archivos en el directorio raíz de OneDrive.
Trabajo en equipo
Para recuperar la lista de equipos a los que el usuario pertenece:
// Retrieving teams that the user is part of
var teams = await graphClient.Me.JoinedTeams
.Request()
.GetAsync();
// Printing each team's display name
foreach (var team in teams)
{
Console.WriteLine($"Team name: {team.DisplayName}");
}
// Retrieving teams that the user is part of
var teams = await graphClient.Me.JoinedTeams
.Request()
.GetAsync();
// Printing each team's display name
foreach (var team in teams)
{
Console.WriteLine($"Team name: {team.DisplayName}");
}
' Retrieving teams that the user is part of
Dim teams = Await graphClient.Me.JoinedTeams.Request().GetAsync()
' Printing each team's display name
For Each team In teams
Console.WriteLine($"Team name: {team.DisplayName}")
Next team
Esto lista los nombres de los Teams de los que el usuario forma parte.
Cada una de estas características demuestra el poder y versatilidad de MS Graph .NET. Muestran cómo puede integrar los servicios de Microsoft 365 en sus aplicaciones.
Integración de MS Graph .NET con IronPDF

Si busca trabajar con PDFs en sus aplicaciones .NET, la Biblioteca IronPDF para Desarrolladores .NET es una excelente opción. Es una biblioteca que da a sus aplicaciones la capacidad de leer, crear y manipular archivos PDF sin necesidad de otras herramientas o software externos de PDF.
Caso de uso: Fusión de IronPDF con MS Graph .NET
Imagina que estás construyendo una aplicación que necesita obtener documentos de Microsoft 365, por ejemplo, informes o facturas, y convertirlos en PDFs. MS Graph .NET te permite interactuar con recursos de Microsoft 365, incluidos archivos almacenados en OneDrive o SharePoint. IronPDF puede entonces ser utilizado para tomar estos documentos y convertirlos en PDFs. Esta combinación es especialmente útil para la generación automática de informes o el archivado de correos electrónicos y adjuntos en un formato PDF para fácil distribución.
Ejemplo de código: De MS Graph a PDF
A continuación se muestra un ejemplo simple. Obtendremos un documento de OneDrive usando MS Graph .NET y luego convertiremos ese documento a un PDF usando IronPDF. Se asume que ya ha configurado su autenticación con MSGraph; de no ser así, hay abundante documentación en el sitio de Microsoft para empezar.
// Simplified example, ensure to handle exceptions and errors appropriately.
using Microsoft.Graph;
using IronPdf;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// Setting up the GraphServiceClient with a DelegateAuthenticationProvider
var graphClient = new GraphServiceClient(
new DelegateAuthenticationProvider(
async (requestMessage) =>
{
// Insert code to acquire token
string accessToken = await GetAccessTokenAsync();
requestMessage.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken);
}));
// Replace 'itemId' with the ID of your document in OneDrive
var stream = await graphClient.Me.Drive.Items["itemId"].Content.Request().GetAsync();
// IronPDF setup to convert the fetched file to PDF
var renderer = new HtmlToPdf();
var pdfDocument = renderer.RenderHtmlAsPdf(StreamToString(stream));
// Save the PDF to a file
pdfDocument.SaveAs("YourDocument.pdf");
}
// Method to convert a Stream to a String
static string StreamToString(Stream stream)
{
using (var reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
// Method to obtain the access token
static async Task<string> GetAccessTokenAsync()
{
// Implement your authentication logic here to return the access token
return "your_access_token";
}
}
// Simplified example, ensure to handle exceptions and errors appropriately.
using Microsoft.Graph;
using IronPdf;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// Setting up the GraphServiceClient with a DelegateAuthenticationProvider
var graphClient = new GraphServiceClient(
new DelegateAuthenticationProvider(
async (requestMessage) =>
{
// Insert code to acquire token
string accessToken = await GetAccessTokenAsync();
requestMessage.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken);
}));
// Replace 'itemId' with the ID of your document in OneDrive
var stream = await graphClient.Me.Drive.Items["itemId"].Content.Request().GetAsync();
// IronPDF setup to convert the fetched file to PDF
var renderer = new HtmlToPdf();
var pdfDocument = renderer.RenderHtmlAsPdf(StreamToString(stream));
// Save the PDF to a file
pdfDocument.SaveAs("YourDocument.pdf");
}
// Method to convert a Stream to a String
static string StreamToString(Stream stream)
{
using (var reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
// Method to obtain the access token
static async Task<string> GetAccessTokenAsync()
{
// Implement your authentication logic here to return the access token
return "your_access_token";
}
}
' Simplified example, ensure to handle exceptions and errors appropriately.
Imports Microsoft.Graph
Imports IronPdf
Imports System.IO
Imports System.Threading.Tasks
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
' Setting up the GraphServiceClient with a DelegateAuthenticationProvider
Dim graphClient = New GraphServiceClient(New DelegateAuthenticationProvider(Async Sub(requestMessage)
' Insert code to acquire token
Dim accessToken As String = Await GetAccessTokenAsync()
requestMessage.Headers.Authorization = New System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken)
End Sub))
' Replace 'itemId' with the ID of your document in OneDrive
Dim stream = Await graphClient.Me.Drive.Items("itemId").Content.Request().GetAsync()
' IronPDF setup to convert the fetched file to PDF
Dim renderer = New HtmlToPdf()
Dim pdfDocument = renderer.RenderHtmlAsPdf(StreamToString(stream))
' Save the PDF to a file
pdfDocument.SaveAs("YourDocument.pdf")
End Function
' Method to convert a Stream to a String
Private Shared Function StreamToString(ByVal stream As Stream) As String
Using reader = New StreamReader(stream)
Return reader.ReadToEnd()
End Using
End Function
' Method to obtain the access token
Private Shared Async Function GetAccessTokenAsync() As Task(Of String)
' Implement your authentication logic here to return the access token
Return "your_access_token"
End Function
End Class
Algunas cosas a tener en cuenta en este código:
- Se usa MSGraph para acceder a un archivo almacenado en OneDrive. Necesitará el ID del elemento, que puede obtener a través de la API de Graph.
- Convertimos el flujo de archivos a una cadena para este ejemplo. Esto funciona bien para documentos HTML. Si estás tratando con archivos binarios (como documentos de Word), querrás utilizar un método diferente para convertir estos archivos a PDFs.
- El método RenderHtmlAsPdf de IronPDF se utiliza aquí para crear un PDF a partir de una cadena HTML. Si su documento de origen no es HTML, IronPDF ofrece métodos para trabajar con otros formatos también.
Tenga en cuenta que este es un ejemplo simplificado. En una aplicación del mundo real, deberá manejar la autenticación de manera más robusta, gestionar errores, y potencialmente lidiar con diferentes formatos de archivo de manera más elegante. Pero esto debería ser un buen punto de partida para integrar MSGraph e IronPDF en sus proyectos .NET.
Conclusión

Para los desarrolladores que buscan integrar las capacidades de Microsoft 365 en sus aplicaciones C#, el SDK de MS Graph .NET es una herramienta esencial. Comience por explorar la información de precios y licencias de MS Graph .NET SDK a partir de $999.
Preguntas Frecuentes
¿Cómo ayuda MS Graph .NET a los desarrolladores a acceder a los datos de Microsoft 365?
MS Graph .NET actúa como una puerta de entrada para que los desarrolladores accedan y gestionen datos de Microsoft 365 a través de la API Microsoft Graph, que forma parte del ecosistema de Azure Active Directory. Proporciona métodos para agilizar el proceso de interacción de datos.
¿Cómo pueden los desarrolladores generar documentos PDF en .NET usando datos de Microsoft 365?
Los desarrolladores pueden usar IronPDF para generar documentos PDF en aplicaciones .NET convirtiendo HTML y otros formatos de documentos en PDFs, aprovechando los datos accedidos mediante MS Graph .NET.
¿Qué se requiere para comenzar a usar MS Graph .NET en un proyecto?
Para comenzar a usar MS Graph .NET, necesitas instalar el paquete Microsoft.Graph a través del administrador de paquetes NuGet y configurar la autenticación usando credenciales de cliente para interactuar con los servicios de Microsoft 365.
¿Cómo puede un desarrollador enviar un correo electrónico usando MS Graph .NET?
Un desarrollador puede enviar un correo electrónico usando MS Graph .NET creando un objeto `Message` con el contenido deseado y los detalles del destinatario, y luego utilizando el método `SendMail` del `GraphServiceClient`.
¿Puede MS Graph .NET gestionar eventos de calendario en una cuenta de Microsoft 365?
Sí, MS Graph .NET permite gestionar eventos de calendario creando objetos `Event` y usando métodos como `Me.Events.Request().AddAsync(event)` para añadir eventos al calendario de un usuario.
¿Cómo se convierte un documento de OneDrive a PDF en una aplicación .NET?
Para convertir un documento de OneDrive a PDF, puedes usar MS Graph .NET para obtener el documento y luego emplear IronPDF para convertir el contenido del documento en formato PDF.
¿Qué consideraciones se deben tener al integrar MS Graph .NET con IronPDF?
Al integrar MS Graph .NET con IronPDF, considera la autenticación robusta, el manejo de errores y la compatibilidad de diferentes formatos de archivo para asegurar una conversión y gestión de datos sin problemas.
¿Cuáles son algunas aplicaciones prácticas de usar MS Graph .NET e IronPDF juntos?
Usar MS Graph .NET e IronPDF juntos permite aplicaciones como la generación de informes en PDF, el archivo de correos electrónicos como PDFs o la creación de documentos comerciales estandarizados a partir de datos de Microsoft 365.
¿Cómo puede MS Graph .NET mejorar la eficiencia de las aplicaciones .NET?
MS Graph .NET mejora la eficiencia al proporcionar acceso simplificado a los servicios de Microsoft 365, permitiendo a los desarrolladores recuperar, gestionar y manipular datos con un mínimo de código, mejorando así la productividad y capacidad de la aplicación.




