Skip to main content

Route

Whenever a network route is set up with Page.RouteAsync() or BrowserContext.RouteAsync(), the Route object allows to handle the route.

Learn more about networking.


Methods

AbortAsync

Added in: v1.8route.AbortAsync

Aborts the route's request.

Usage

await Route.AbortAsync(errorCode);

Arguments

  • errorCode string? (optional)#

    Optional error code. Defaults to failed, could be one of the following:

    • 'aborted' - An operation was aborted (due to user action)
    • 'accessdenied' - Permission to access a resource, other than the network, was denied
    • 'addressunreachable' - The IP address is unreachable. This usually means that there is no route to the specified host or network.
    • 'blockedbyclient' - The client chose to block the request.
    • 'blockedbyresponse' - The request failed because the response was delivered along with requirements which are not met ('X-Frame-Options' and 'Content-Security-Policy' ancestor checks, for instance).
    • 'connectionaborted' - A connection timed out as a result of not receiving an ACK for data sent.
    • 'connectionclosed' - A connection was closed (corresponding to a TCP FIN).
    • 'connectionfailed' - A connection attempt failed.
    • 'connectionrefused' - A connection attempt was refused.
    • 'connectionreset' - A connection was reset (corresponding to a TCP RST).
    • 'internetdisconnected' - The Internet connection has been lost.
    • 'namenotresolved' - The host name could not be resolved.
    • 'timedout' - An operation timed out.
    • 'failed' - A generic failure occurred.

ContinueAsync

Added in: v1.8route.ContinueAsync

Continues route's request with optional overrides.

Usage

await page.RouteAsync("**/*", route =>
{
var headers = new Dictionary<string, string>(route.Request.Headers) { { "foo", "bar" } };
headers.Remove("origin");
route.ContinueAsync(headers);
});

Arguments

  • options RouteContinueOptions? (optional)
    • Headers IDictionary?<string, string> (optional)#

      If set changes the request HTTP headers. Header values will be converted to a string.

    • Method string? (optional)#

      If set changes the request method (e.g. GET or POST).

    • PostData byte[]? (optional)#

      If set changes the post data of request.

    • Url string? (optional)#

      If set changes the request URL. New URL must have same protocol as original one.


FallbackAsync

Added in: v1.23route.FallbackAsync

When several routes match the given pattern, they run in the order opposite to their registration. That way the last registered route can always override all the previous ones. In the example below, request will be handled by the bottom-most handler first, then it'll fall back to the previous one and in the end will be aborted by the first registered route.

Usage

await page.RouteAsync("**/*", route => {
// Runs last.
await route.AbortAsync();
});

await page.RouteAsync("**/*", route => {
// Runs second.
await route.FallbackAsync();
});

await page.RouteAsync("**/*", route => {
// Runs first.
await route.FallbackAsync();
});

Registering multiple routes is useful when you want separate handlers to handle different kinds of requests, for example API calls vs page resources or GET requests vs POST requests as in the example below.

// Handle GET requests.
await page.RouteAsync("**/*", route => {
if (route.Request.Method != "GET") {
await route.FallbackAsync();
return;
}
// Handling GET only.
// ...
});

// Handle POST requests.
await page.RouteAsync("**/*", route => {
if (route.Request.Method != "POST") {
await route.FallbackAsync();
return;
}
// Handling POST only.
// ...
});

One can also modify request while falling back to the subsequent handler, that way intermediate route handler can modify url, method, headers and postData of the request.

await page.RouteAsync("**/*", route =>
{
var headers = new Dictionary<string, string>(route.Request.Headers) { { "foo", "foo-value" } };
headers.Remove("bar");
route.FallbackAsync(headers);
});

Arguments

  • options RouteFallbackOptions? (optional)
    • Headers IDictionary?<string, string> (optional)#

      If set changes the request HTTP headers. Header values will be converted to a string.

    • Method string? (optional)#

      If set changes the request method (e.g. GET or POST).

    • PostData byte[]? (optional)#

      If set changes the post data of request.

    • Url string? (optional)#

      If set changes the request URL. New URL must have same protocol as original one. Changing the URL won't affect the route matching, all the routes are matched using the original request URL.


FetchAsync

Added in: v1.29route.FetchAsync

Performs the request and fetches result without fulfilling it, so that the response could be modified and then fulfilled.

Usage

await page.RouteAsync("https://dog.ceo/api/breeds/list/all", async route =>
{
var response = await route.FetchAsync();
dynamic json = await response.JsonAsync();
json.message.big_red_dog = new string[] {};
await route.FulfillAsync(new() { Response = response, Json = json });
});

Arguments

  • options RouteFetchOptions? (optional)
    • Headers IDictionary?<string, string> (optional)#

      If set changes the request HTTP headers. Header values will be converted to a string.

    • Method string? (optional)#

      If set changes the request method (e.g. GET or POST).

    • PostData byte[]? (optional)#

      If set changes the post data of request.

    • Url string? (optional)#

      If set changes the request URL. New URL must have same protocol as original one.

Returns


FulfillAsync

Added in: v1.8route.FulfillAsync

Fulfills route's request with given response.

Usage

An example of fulfilling all requests with 404 responses:

await page.RouteAsync("**/*", route => route.FulfillAsync(new ()
{
Status = 404,
ContentType = "text/plain",
Body = "Not Found!")
});

An example of serving static file:

await page.RouteAsync("**/xhr_endpoint", route => route.FulfillAsync(new() { Path = "mock_data.json" }));

Arguments

  • options RouteFulfillOptions? (optional)
    • Body string? (optional)#

      Optional response body as text.

    • BodyBytes byte[]? (optional) Added in: v1.9#

      Optional response body as raw bytes.

    • ContentType string? (optional)#

      If set, equals to setting Content-Type response header.

    • Headers IDictionary?<string, string> (optional)#

      Response headers. Header values will be converted to a string.

    • Json [object]? (optional) Added in: v1.29#

      JSON response. This method will set the content type to application/json if not set.

    • Path string? (optional)#

      File path to respond with. The content type will be inferred from file extension. If path is a relative path, then it is resolved relative to the current working directory.

    • Response APIResponse? (optional) Added in: v1.15#

      APIResponse to fulfill route's request with. Individual fields of the response (such as headers) can be overridden using fulfill options.

    • Status int? (optional)#

      Response status code, defaults to 200.


Request

Added in: v1.8route.Request

A request to be routed.

Usage

Route.Request

Returns