| title | IHttpRequest::ReadEntityBody Method |
|---|---|
| description | Learn how the IHttpRequest::ReadEntityBody method returns the HTTP request entity body. |
| ms.date | 10/07/2016 |
| ms.assetid | e29ce6f7-d839-ee92-184f-747f98f6a456 |
Returns the HTTP request entity body.
virtual HRESULT ReadEntityBody(
OUT VOID* pvBuffer,
IN DWORD cbBuffer,
IN BOOL fAsync,
OUT DWORD* pcbBytesReceived,
OUT BOOL* pfCompletionPending = NULL
) = 0; pvBuffer
[OUT] A pointer to a buffer that receives the request body.
cbBuffer
[IN] The size, in bytes, of the buffer pointed to by pvBuffer.
fAsync
[IN] true to complete the operation asynchronously; otherwise, false.
pcbBytesReceived
[OUT] A pointer to a DWORD buffer that receives the number of bytes actually read if the method call completes synchronously.
pfCompletionPending
[OUT] A pointer to a Boolean buffer that receives a value that specifies whether an asynchronous completion is pending.
An HRESULT. Possible values include, but are not limited to, those in the following table.
| Value | Description |
|---|---|
| S_OK | Indicates that the operation was successful. |
| ERROR_CONNECTION_INVALID | Indicates that the byte count for the current request is incorrect. |
| ERROR_HANDLE_EOF | Indicates that there is no remaining data to be read. |
| ERROR_INVALID_PARAMETER | Indicates that an invalid value was passed in one of the parameters. |
| ERROR_NOT_ENOUGH_MEMORY | Indicates that there is insufficient memory to perform the operation. |
The ReadEntityBody method supports both synchronous and asynchronous calls.
Note
If you are calling the ReadEntityBody method asynchronously, your module needs to return immediately after the call.
After the ReadEntityBody method is called, the pvBuffer buffer will contain the request body, and the pcbBytesReceived buffer will contain the size, in bytes, of the request body that was returned in the pvBuffer buffer if the method call completed synchronously.
In addition, the pfCompletionPending buffer will contain a Boolean value that specifies whether an asynchronous completion is pending.
The following code example demonstrates how to use the ReadEntityBody method to create an HTTP module that retrieves a 1-KB buffer section from the current request.
[!code-cppIHttpRequestReadEntityBody#1]
Your module must export the RegisterModule function. You can export this function by creating a module definition (.def) file for your project, or you can compile the module by using the /EXPORT:RegisterModule switch. For more information, see Walkthrough: Creating a Request-Level HTTP Module By Using Native Code.
You can optionally compile the code by using the __stdcall (/Gz) calling convention instead of explicitly declaring the calling convention for each function.
| Type | Description |
|---|---|
| Client | - IIS 7.0 on [!INCLUDEwinvista] - IIS 7.5 on Windows 7 - IIS 8.0 on Windows 8 - IIS 10.0 on Windows 10 |
| Server | - IIS 7.0 on [!INCLUDEwinsrv2008] - IIS 7.5 on Windows Server 2008 R2 - IIS 8.0 on Windows Server 2012 - IIS 8.5 on Windows Server 2012 R2 - IIS 10.0 on Windows Server 2016 |
| Product | - IIS 7.0, IIS 7.5, IIS 8.0, IIS 8.5, IIS 10.0 - [!INCLUDEiisexp75], [!INCLUDEiisexp80], [!INCLUDEiisexp100] |
| Header | Httpserv.h |
IHttpRequest Interface
IHttpRequest::GetRemainingEntityBytes Method
IHttpRequest::InsertEntityBody Method