Files
microsoft-365-service/examples/csharp/README.md
T
JiriUhlirandClaude Fable 5.1 fe3c3a736a Calendar a Planner endpointy, admin consent URL, C# ukazka (1.1.0)
Podle zadani "MS365 prava konektoru":
- Calendar: calendarView, getSchedule, get/patch/delete udalosti
- Planner: plany skupiny, buckety, tasky, create/patch/delete s ETag
- GET /admin-consent/url pro onboarding klientskeho tenantu
- examples/csharp/ListUsersTop10: ukazka volani GET /users?top=10
  vcetne sifrovani hlavicek X-MS365-*
- README: multitenant napojeni, endpointy, opravneni, zaznam zmen

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 11:52:52 +02:00

1.5 KiB

Ukazky volani sluzby v C#

ListUsersTop10

Konzolova aplikace (.NET 8), ktera zavola GET /users?top=10 a vypise displayName, userPrincipalName, mail a id kazdeho uzivatele.

Obsahuje tridu CredentialEncoder, ktera sifruje hodnoty pro hlavicky X-MS365-Tenant-Id, X-MS365-Client-Id a X-MS365-Client-Secret presne tak, jak je sluzba dekoduje v app/credentials.py. Tridu lze zkopirovat do libovolneho projektu, nema zadne externi zavislosti.

Spusteni

cd examples/csharp/ListUsersTop10
$env:MS365_SERVICE_BASE_URL = "https://services.csbot.cz/apps/microsoft-365-service"
$env:MS365_TENANT_ID = "<tenant id>"
$env:MS365_CLIENT_ID = "<client id>"
$env:MS365_CLIENT_SECRET = "<client secret>"
$env:MS365_CREDENTIAL_ENCODING_SECRET = "<sdileny secret, stejny jako na serveru>"
dotnet run

Co ocekavat

  • 200 a JSON ve tvaru Microsoft Graph: { "value": [ ... ], "@odata.nextLink": "..." }.
  • 400 kdyz hlavicky chybi, jsou neuplne, prosle nebo je spatny sdileny secret.
  • 502 kdyz Microsoft Graph nebo prihlaseni k Entra ID selze, detail je v tele odpovedi.
  • 503 kdyz sluzba nema nastaveny MS365_CREDENTIAL_ENCODING_SECRET.
  • 403 text/plain kdyz GET neprojde pres reverzni proxy (IP allowlist), tj. problem neni ve sluzbe, ale v sitovem pristupu klienta.

Hlavicky lze vynechat jen tehdy, kdyz ma sluzba credentials nastavene v environment promennych na serveru. Instance na services.csbot.cz je nema (GET /status vraci configured: false), takze tam jsou hlavicky povinne.