Skip to content

Commit

Permalink
Merge pull request #67 from MicrosoftDocs/repo_sync_working_branch
Browse files Browse the repository at this point in the history
Confirm merge from repo_sync_working_branch to main to sync with https://github.com/microsoftdocs/openapi-docs (branch main)
  • Loading branch information
baywet authored Nov 21, 2023
2 parents 6583218 + a69da76 commit 6e11c4f
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
2 changes: 2 additions & 0 deletions OpenAPI/kiota/index.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ landingContent:
url: experience.md
- text: Authentication
url: authentication.md
- text: Middleware
url: middleware.md

- title: Get started
linkLists:
Expand Down
56 changes: 56 additions & 0 deletions OpenAPI/kiota/middleware.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
title: Middleware
description: Learn about implementing middleware into Kiota.
author: baywet
ms.author: vibiret
ms.topic: overview
date: 21/11/2023
---

# Implementing Middleware

By registering custom middleware handlers you can perform operations before a request is made. For example, auditing and filtering the request before the client sends it.

## Middleware

Create your middleware class and add your business requirements. For example you may wish to add custom Headers to the request or filter headers and content.

```cs
public class SaveRequestHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
var jsonContent = await request.Content.ReadAsStringAsync(cancellationToken);
Console.WriteLine($"Request: {jsonContent}");

return await base.SendAsync(request, cancellationToken);
}
}
```

## Register Middleware

Create a middleware handlers array and use the existing middleware already implemented within **Microsoft.Kiota.HttpClientLibrary** that includes existing handlers like retry, redirect and more.

```cs
var handlers = KiotaClientFactory.CreateDefaultHandlers();
handlers.Add(new SaveRequestHandler());
```

Next you will need to create a Delegate chain so the middleware handlers are registered in the right order.

```cs
var httpMessageHandler =
KiotaClientFactory.ChainHandlersCollectionAndGetFirstLink(
KiotaClientFactory.GetDefaultHttpMessageHandler(),
handlers.ToArray());
```

Finally, create a request adapter using a HttpClient with the message handler that was just created. This adapter can then be used when submitting requests from the generated client. This design means different adapters/middleware can be used when calling APIs and therefore gives flexibility to how and when a middleware handler is used.

```cs
var httpClient = new HttpClient(httpMessageHandler!);
var adapter = new HttpClientRequestAdapter(authProvider, httpClient:httpClient);
var client = new PostsClient(adapter); // the name of the client will vary based on your generation parameters
```

0 comments on commit 6e11c4f

Please sign in to comment.