public sealed class AppEngineHttpRequest : IMessage<AppEngineHttpRequest>, IEquatable<AppEngineHttpRequest>, IDeepCloneable<AppEngineHttpRequest>, IBufferMessage, IMessage
Reference documentation and code samples for the Google Cloud Tasks v2beta3 API class AppEngineHttpRequest.
App Engine HTTP request.
The message defines the HTTP request that is sent to an App Engine app when
the task is dispatched.
Using [AppEngineHttpRequest][google.cloud.tasks.v2beta3.AppEngineHttpRequest]
requires
appengine.applications.get
Google IAM permission for the project
and the following scope:
https://www.googleapis.com/auth/cloud-platform
The task will be delivered to the App Engine app which belongs to the same
project as the queue. For more information, see
How Requests are
Routed
and how routing is affected by
dispatch
files.
Traffic is encrypted during transport and never leaves Google datacenters.
Because this traffic is carried over a communication mechanism internal to
Google, you cannot explicitly set the protocol (for example, HTTP or HTTPS).
The request to the handler, however, will appear to have used the HTTP
protocol.
The [AppEngineRouting][google.cloud.tasks.v2beta3.AppEngineRouting] used to
construct the URL that the task is delivered to can be set at the queue-level
or task-level:
If set,
[app_engine_routing_override][google.cloud.tasks.v2beta3.AppEngineHttpQueue.app_engine_routing_override]
is used for all tasks in the queue, no matter what the setting
is for the
[task-level
app_engine_routing][google.cloud.tasks.v2beta3.AppEngineHttpRequest.app_engine_routing].
Tasks can be dispatched to secure app handlers, unsecure app handlers, and
URIs restricted with
login:
admin.
Because tasks are not run as any user, they cannot be dispatched to URIs
restricted with
login:
required
Task dispatches also do not follow redirects.
The task attempt has succeeded if the app's request handler returns an HTTP
response code in the range [200 - 299]. The task attempt has failed if
the app's handler returns a non-2xx response code or Cloud Tasks does
not receive response before the
[deadline][google.cloud.tasks.v2beta3.Task.dispatch_deadline]. Failed tasks
will be retried according to the [retry
configuration][google.cloud.tasks.v2beta3.Queue.retry_config]. 503 (Service
Unavailable) is considered an App Engine system error instead of an
application error and will cause Cloud Tasks' traffic congestion control to
temporarily throttle the queue's dispatches. Unlike other types of task
targets, a 429 (Too Many Requests) response from an app handler does not
cause traffic congestion control to throttle the queue.
public AppEngineRouting AppEngineRouting { get; set; }
Task-level setting for App Engine routing.
If set,
[app_engine_routing_override][google.cloud.tasks.v2beta3.AppEngineHttpQueue.app_engine_routing_override]
is used for all tasks in the queue, no matter what the setting is for the
[task-level
app_engine_routing][google.cloud.tasks.v2beta3.AppEngineHttpRequest.app_engine_routing].
A request body is allowed only if the HTTP method is POST or PUT. It is
an error to set a body on a task with an incompatible
[HttpMethod][google.cloud.tasks.v2beta3.HttpMethod].
This map contains the header field names and values.
Headers can be set when the
[task is created][google.cloud.tasks.v2beta3.CloudTasks.CreateTask].
Repeated headers are not supported but a header value can contain commas.
Cloud Tasks sets some headers to default values:
User-Agent: By default, this header is
"AppEngine-Google; (+http://code.google.com/appengine)".
This header can be modified, but Cloud Tasks will append
"AppEngine-Google; (+http://code.google.com/appengine)" to the
modified User-Agent.
If the task has a
[body][google.cloud.tasks.v2beta3.AppEngineHttpRequest.body], Cloud Tasks
sets the following headers:
Content-Type: By default, the Content-Type header is set to
"application/octet-stream". The default can be overridden by explicitly
setting Content-Type to a particular media type when the
[task is created][google.cloud.tasks.v2beta3.CloudTasks.CreateTask].
For example, Content-Type can be set to "application/json".
Content-Length: This is computed by Cloud Tasks. This value is
output only. It cannot be changed.
The headers below cannot be set or overridden:
Host
X-Google-*
X-AppEngine-*
In addition, Cloud Tasks sets some headers when the task is dispatched,
such as headers containing information about the task; see
request
headers.
These headers are set only when the task is dispatched, so they are not
visible when the task is returned in a Cloud Tasks response.
Although there is no specific limit for the maximum number of headers or
the size, there is a limit on the maximum size of the
[Task][google.cloud.tasks.v2beta3.Task]. For more information, see the
[CreateTask][google.cloud.tasks.v2beta3.CloudTasks.CreateTask]
documentation.
The HTTP method to use for the request. The default is POST.
The app's request handler for the task's target URL must be able to handle
HTTP requests with this http_method, otherwise the task attempt fails with
error code 405 (Method Not Allowed). See Writing a push task request
handler
and the App Engine documentation for your runtime on How Requests are
Handled.
The relative URI must begin with "/" and must be a valid HTTP relative URI.
It can contain a path and query string arguments.
If the relative URI is empty, then the root path "/" will be used.
No spaces are allowed, and the maximum length allowed is 2083 characters.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-04 UTC."],[[["\u003cp\u003eThe \u003ccode\u003eAppEngineHttpRequest\u003c/code\u003e class defines the HTTP request sent to an App Engine app when a task is dispatched, requiring specific IAM permissions and the \u003ccode\u003ecloud-platform\u003c/code\u003e scope.\u003c/p\u003e\n"],["\u003cp\u003eTasks are delivered to App Engine apps within the same project as the queue, with routing determined by queue-level or task-level \u003ccode\u003eapp_engine_routing\u003c/code\u003e settings, and traffic is encrypted and remains within Google datacenters.\u003c/p\u003e\n"],["\u003cp\u003eThe success of a task attempt depends on the app's request handler returning an HTTP response code between \u003ccode\u003e200\u003c/code\u003e and \u003ccode\u003e299\u003c/code\u003e, with non-2xx codes or timeouts leading to retries based on the queue's retry configuration.\u003c/p\u003e\n"],["\u003cp\u003eHeaders can be customized during task creation, but certain headers like \u003ccode\u003eHost\u003c/code\u003e and \u003ccode\u003eX-Google-*\u003c/code\u003e are restricted, and Cloud Tasks automatically sets or modifies others like \u003ccode\u003eUser-Agent\u003c/code\u003e and \u003ccode\u003eContent-Type\u003c/code\u003e based on task properties.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eurl\u003c/code\u003e that the task will be sent to is constructed using the \u003ccode\u003ehost\u003c/code\u003e of the \u003ccode\u003eAppEngineRouting\u003c/code\u003e combined with the \u003ccode\u003erelative_uri\u003c/code\u003e of the \u003ccode\u003eAppEngineHttpRequest\u003c/code\u003e.\u003c/p\u003e\n"]]],[],null,["# Google Cloud Tasks v2beta3 API - Class AppEngineHttpRequest (3.0.0-beta07)\n\nVersion latestkeyboard_arrow_down\n\n- [3.0.0-beta07 (latest)](/dotnet/docs/reference/Google.Cloud.Tasks.V2Beta3/latest/Google.Cloud.Tasks.V2Beta3.AppEngineHttpRequest)\n- [3.0.0-beta06](/dotnet/docs/reference/Google.Cloud.Tasks.V2Beta3/3.0.0-beta06/Google.Cloud.Tasks.V2Beta3.AppEngineHttpRequest)\n- [2.0.0-beta08](/dotnet/docs/reference/Google.Cloud.Tasks.V2Beta3/2.0.0-beta08/Google.Cloud.Tasks.V2Beta3.AppEngineHttpRequest) \n\n public sealed class AppEngineHttpRequest : IMessage\u003cAppEngineHttpRequest\u003e, IEquatable\u003cAppEngineHttpRequest\u003e, IDeepCloneable\u003cAppEngineHttpRequest\u003e, IBufferMessage, IMessage\n\nReference documentation and code samples for the Google Cloud Tasks v2beta3 API class AppEngineHttpRequest.\n\nApp Engine HTTP request.\n\nThe message defines the HTTP request that is sent to an App Engine app when\nthe task is dispatched.\n\nUsing \\[AppEngineHttpRequest\\]\\[google.cloud.tasks.v2beta3.AppEngineHttpRequest\\]\nrequires\n[`appengine.applications.get`](https://cloud.google.com/appengine/docs/admin-api/access-control)\nGoogle IAM permission for the project\nand the following scope:\n\n`https://www.googleapis.com/auth/cloud-platform`\n\nThe task will be delivered to the App Engine app which belongs to the same\nproject as the queue. For more information, see\n[How Requests are\nRouted](https://cloud.google.com/appengine/docs/standard/python/how-requests-are-routed)\nand how routing is affected by\n[dispatch\nfiles](https://cloud.google.com/appengine/docs/python/config/dispatchref).\nTraffic is encrypted during transport and never leaves Google datacenters.\nBecause this traffic is carried over a communication mechanism internal to\nGoogle, you cannot explicitly set the protocol (for example, HTTP or HTTPS).\nThe request to the handler, however, will appear to have used the HTTP\nprotocol.\n\nThe \\[AppEngineRouting\\]\\[google.cloud.tasks.v2beta3.AppEngineRouting\\] used to\nconstruct the URL that the task is delivered to can be set at the queue-level\nor task-level:\n\n- If set, \\[app_engine_routing_override\\]\\[google.cloud.tasks.v2beta3.AppEngineHttpQueue.app_engine_routing_override\\] is used for all tasks in the queue, no matter what the setting is for the \\[task-level app_engine_routing\\]\\[google.cloud.tasks.v2beta3.AppEngineHttpRequest.app_engine_routing\\].\n\nThe `url` that the task will be sent to is:\n\n- `url =` \\[host\\]\\[google.cloud.tasks.v2beta3.AppEngineRouting.host\\] `+` \\[relative_uri\\]\\[google.cloud.tasks.v2beta3.AppEngineHttpRequest.relative_uri\\]\n\nTasks can be dispatched to secure app handlers, unsecure app handlers, and\nURIs restricted with\n[`login:\nadmin`](https://cloud.google.com/appengine/docs/standard/python/config/appref).\nBecause tasks are not run as any user, they cannot be dispatched to URIs\nrestricted with\n[`login:\nrequired`](https://cloud.google.com/appengine/docs/standard/python/config/appref)\nTask dispatches also do not follow redirects.\n\nThe task attempt has succeeded if the app's request handler returns an HTTP\nresponse code in the range \\[`200` - `299`\\]. The task attempt has failed if\nthe app's handler returns a non-2xx response code or Cloud Tasks does\nnot receive response before the\n\\[deadline\\]\\[google.cloud.tasks.v2beta3.Task.dispatch_deadline\\]. Failed tasks\nwill be retried according to the \\[retry\nconfiguration\\]\\[google.cloud.tasks.v2beta3.Queue.retry_config\\]. `503` (Service\nUnavailable) is considered an App Engine system error instead of an\napplication error and will cause Cloud Tasks' traffic congestion control to\ntemporarily throttle the queue's dispatches. Unlike other types of task\ntargets, a `429` (Too Many Requests) response from an app handler does not\ncause traffic congestion control to throttle the queue. \n\nInheritance\n-----------\n\n[object](https://learn.microsoft.com/dotnet/api/system.object) \\\u003e AppEngineHttpRequest \n\nImplements\n----------\n\n[IMessage](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IMessage-1.html)[AppEngineHttpRequest](/dotnet/docs/reference/Google.Cloud.Tasks.V2Beta3/latest/Google.Cloud.Tasks.V2Beta3.AppEngineHttpRequest), [IEquatable](https://learn.microsoft.com/dotnet/api/system.iequatable-1)[AppEngineHttpRequest](/dotnet/docs/reference/Google.Cloud.Tasks.V2Beta3/latest/Google.Cloud.Tasks.V2Beta3.AppEngineHttpRequest), [IDeepCloneable](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IDeepCloneable-1.html)[AppEngineHttpRequest](/dotnet/docs/reference/Google.Cloud.Tasks.V2Beta3/latest/Google.Cloud.Tasks.V2Beta3.AppEngineHttpRequest), [IBufferMessage](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IBufferMessage.html), [IMessage](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IMessage.html) \n\nInherited Members\n-----------------\n\n[object.GetHashCode()](https://learn.microsoft.com/dotnet/api/system.object.gethashcode) \n[object.GetType()](https://learn.microsoft.com/dotnet/api/system.object.gettype) \n[object.ToString()](https://learn.microsoft.com/dotnet/api/system.object.tostring)\n\nNamespace\n---------\n\n[Google.Cloud.Tasks.V2Beta3](/dotnet/docs/reference/Google.Cloud.Tasks.V2Beta3/latest/Google.Cloud.Tasks.V2Beta3)\n\nAssembly\n--------\n\nGoogle.Cloud.Tasks.V2Beta3.dll\n\nConstructors\n------------\n\n### AppEngineHttpRequest()\n\n public AppEngineHttpRequest()\n\n### AppEngineHttpRequest(AppEngineHttpRequest)\n\n public AppEngineHttpRequest(AppEngineHttpRequest other)\n\nProperties\n----------\n\n### AppEngineRouting\n\n public AppEngineRouting AppEngineRouting { get; set; }\n\nTask-level setting for App Engine routing.\n\nIf set,\n\\[app_engine_routing_override\\]\\[google.cloud.tasks.v2beta3.AppEngineHttpQueue.app_engine_routing_override\\]\nis used for all tasks in the queue, no matter what the setting is for the\n\\[task-level\napp_engine_routing\\]\\[google.cloud.tasks.v2beta3.AppEngineHttpRequest.app_engine_routing\\].\n\n### Body\n\n public ByteString Body { get; set; }\n\nHTTP request body.\n\nA request body is allowed only if the HTTP method is POST or PUT. It is\nan error to set a body on a task with an incompatible\n\\[HttpMethod\\]\\[google.cloud.tasks.v2beta3.HttpMethod\\].\n\n### Headers\n\n public MapField\u003cstring, string\u003e Headers { get; }\n\nHTTP request headers.\n\nThis map contains the header field names and values.\nHeaders can be set when the\n\\[task is created\\]\\[google.cloud.tasks.v2beta3.CloudTasks.CreateTask\\].\nRepeated headers are not supported but a header value can contain commas.\n\nCloud Tasks sets some headers to default values:\n\n- `User-Agent`: By default, this header is `\"AppEngine-Google; (+http://code.google.com/appengine)\"`. This header can be modified, but Cloud Tasks will append `\"AppEngine-Google; (+http://code.google.com/appengine)\"` to the modified `User-Agent`.\n\nIf the task has a\n\\[body\\]\\[google.cloud.tasks.v2beta3.AppEngineHttpRequest.body\\], Cloud Tasks\nsets the following headers:\n\n- `Content-Type`: By default, the `Content-Type` header is set to `\"application/octet-stream\"`. The default can be overridden by explicitly setting `Content-Type` to a particular media type when the \\[task is created\\]\\[google.cloud.tasks.v2beta3.CloudTasks.CreateTask\\]. For example, `Content-Type` can be set to `\"application/json\"`.\n- `Content-Length`: This is computed by Cloud Tasks. This value is output only. It cannot be changed.\n\nThe headers below cannot be set or overridden:\n\n- `Host`\n- `X-Google-*`\n- `X-AppEngine-*`\n\nIn addition, Cloud Tasks sets some headers when the task is dispatched,\nsuch as headers containing information about the task; see\n[request\nheaders](https://cloud.google.com/tasks/docs/creating-appengine-handlers#reading_request_headers).\nThese headers are set only when the task is dispatched, so they are not\nvisible when the task is returned in a Cloud Tasks response.\n\nAlthough there is no specific limit for the maximum number of headers or\nthe size, there is a limit on the maximum size of the\n\\[Task\\]\\[google.cloud.tasks.v2beta3.Task\\]. For more information, see the\n\\[CreateTask\\]\\[google.cloud.tasks.v2beta3.CloudTasks.CreateTask\\]\ndocumentation.\n\n### HttpMethod\n\n public HttpMethod HttpMethod { get; set; }\n\nThe HTTP method to use for the request. The default is POST.\n\nThe app's request handler for the task's target URL must be able to handle\nHTTP requests with this http_method, otherwise the task attempt fails with\nerror code 405 (Method Not Allowed). See [Writing a push task request\nhandler](https://cloud.google.com/appengine/docs/java/taskqueue/push/creating-handlers#writing_a_push_task_request_handler)\nand the App Engine documentation for your runtime on [How Requests are\nHandled](https://cloud.google.com/appengine/docs/standard/python3/how-requests-are-handled).\n\n### RelativeUri\n\n public string RelativeUri { get; set; }\n\nThe relative URI.\n\nThe relative URI must begin with \"/\" and must be a valid HTTP relative URI.\nIt can contain a path and query string arguments.\nIf the relative URI is empty, then the root path \"/\" will be used.\nNo spaces are allowed, and the maximum length allowed is 2083 characters."]]