Microsoft Graph API возвращает тело почтового сообщения в виде HTML
Я хочу прочитать мои электронные письма и преобразовать их в JSON. Я использую Microsoft Graph API для запроса почтового ящика Office 365, как это
GraphServiceClient client = new GraphServiceClient(
new DelegateAuthenticationProvider (
(requestMessage) =>
{
requestMessage.Headers.Authorization =
new AuthenticationHeaderValue("Bearer", token);
return Task.FromResult(0);
}
)
);
var mailResults = await client.Me.MailFolders.Inbox.Messages.Request()
.OrderBy("receivedDateTime DESC")
.Select(m => new { m.Subject, m.ReceivedDateTime, m.From, m.Body})
.Top(100)
.GetAsync();
Я следовал этому руководству, чтобы добраться до этой стадии. Но мое тело сообщения возвращается как HTML вместо текста. Есть ли способ, которым я могу указать message.body для возврата текста или даже JSON вместо HTML?
1 ответ
Не нужно устанавливать заголовок HTTP-запроса:
Предпочтение: outlook.body-content-type="text"
Согласно документации https://docs.microsoft.com/en-us/previous-versions/office/office-365-api/api/version-2.0/mail-rest-operations
Редактировать:
Просмотрите документацию, это код класса клиента: https://github.com/microsoftgraph/msgraph-sdk-dotnet/blob/dev/src/Microsoft.Graph/Requests/Generated/GraphServiceClient.cs
Вот пример из ссылки, по которой вы переходите:
private static GraphServiceClient GetClient(string accessToken, IHttpProvider provider = null)
{
var delegateAuthProvider = new DelegateAuthenticationProvider((requestMessage) =>
{
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
return Task.FromResult(0);
});
var graphClient = new GraphServiceClient(delegateAuthProvider, provider ?? HttpProvider);
return graphClient;
}
С помощью GraphServiceClient вызовите
.Header("Prefer", "outlook.body-content-type='text'")
как часть вашей цепочки методов запроса:
var mailResults = await client.Me.MailFolders.Inbox.Messages
.Request()
.Header("Prefer", "outlook.body-content-type='text'")
.OrderBy("receivedDateTime DESC")
.Select(m => new { m.Subject, m.ReceivedDateTime, m.From, m.Body})
.Top(100)
.GetAsync();