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 might wish to add custom headers to the request or filter headers and content.
Create a middleware handlers array and use the existing middleware already implemented within the HTTP library that includes existing handlers like retry, redirect, and more.
var httpMessageHandler =
KiotaClientFactory.ChainHandlersCollectionAndGetFirstLink(
KiotaClientFactory.GetDefaultHttpMessageHandler(),
handlers.ToArray());
// this step is not required for TypeScript
Finally, create a request adapter using an HTTP client. 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.
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
The following table describes which middleware handlers are implemented by the HTTP package, and which ones are included by default with any new request adapter.
Name
Description
C# Support
Go Support
Java Support
TypeScript Support
PHP Support
Python Support
Authorization
Adds an access token to the request when using a native HTTP client.
Yes
No
Yes
No
No
No
Body Inspection
Allows the client application to inspect the request and response body through the associated options.
No
No
No
No
No
No
Chaos
For testing purposes only. Randomly fails requests to allow testing clients' resilience.
Yes
Yes
Yes
Yes
Yes
No
Headers Inspection
Allows the client application to inspect the request and response headers through the associated options.
Default
Default
Default
Default
Default
Default
Parameters Name Decoding
Decodes query parameter names that were encoded when building the URL because they contained characters not allowed by RFC 6570.
Default
Default
Default
Default
Default
Default
Redirect
Automatically follows Location response headers when a 301 or 302 response status code is received.
Default
Default
Default
Default
Default
Default
Request Compression
Compresses request bodies and retries requests without compression when a 415 response status code is received.
No
Default
No
Default
No
No
Response Decompression
Adds an Accept-Encoding request header and decompresses any response body with a Content-Encoding response header.
N/A
N/A
N/A
N/A
N/A
N/A
Retry
Automatically retries requests when a 429 or a 503 response status code is received.
Default
Default
Default
Default
Default
Default
Sunset
Logs a warning message with Open Telemetry upon receiving a Sunset response header.
No
No
No
No
No
No
Telemetry
Adds an extension point to augment the request with telemetry headers.
Yes
No
No
Yes
Yes
No
Uri Replacement
Enables replacement of segments of the request URI before it's sent out.
Default
Yes
Default
Yes
Yes
Default
User Agent
Adds the kiota http library version to the user agent request header.
Default
Default
Default
Default
Default
Default
Note
Languages with N/A in the response decompression column leverage the native response decompression offered by the HTTP client instead.
Note
Languages with Default for the handler support value include the handler by default when creating the request adapter with no additional configuration.
Note
Request body decompression is not enabled by default in ASP.NET Core APIs and needs to be enabled. Find out how to enable it with Request Decompression in ASP.NET core.
Understand and implement middleware in an ASP.NET Core app. Use included middleware like HTTP logging and authentication. Create custom middleware to handle requests and responses.