WebRequest::BeginGetRequestStream Method
When overridden in a descendant class, provides an asynchronous version of the GetRequestStream method.
Namespace: System.Net
Assembly: System (in System.dll)
[HostProtectionAttribute(SecurityAction::LinkDemand, ExternalThreading = true)] public: virtual IAsyncResult^ BeginGetRequestStream( AsyncCallback^ callback, Object^ state )
Parameters
- callback
- Type: System::AsyncCallback
The AsyncCallback delegate.
- state
- Type: System::Object
An object containing state information for this asynchronous request.
| Exception | Condition |
|---|---|
| NotImplementedException | Any attempt is made to access the method, when the method is not overridden in a descendant class. |
The BeginGetRequestStream method starts an asynchronous request for a stream used to send data to an Internet resource. The callback method that implements the AsyncCallback delegate uses the EndGetRequestStream method to return the request stream.
Note |
|---|
The WebRequest class is an abstract class. The actual behavior of WebRequest instances at run time is determined by the descendant class returned by the WebRequest::Create method. For more information about default values and exceptions, see the documentation for the descendant classes, such as HttpWebRequest and FileWebRequest. |
Note |
|---|
The HostProtectionAttribute attribute applied to this type or member has the following Resources property value: ExternalThreading. The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser). For more information, see the HostProtectionAttribute class or SQL Server Programming and Host Protection Attributes. |
The following example uses the BeginGetRequestStream to asynchronously obtain the request stream.
#using <System.dll> using namespace System; using namespace System::Net; using namespace System::IO; using namespace System::Text; using namespace System::Threading; public ref class RequestState { public: // This class stores the request state of the request. WebRequest^ request; RequestState() { request = nullptr; } }; ref class WebRequest_BeginGetRequeststream { public: static ManualResetEvent^ allDone = gcnew ManualResetEvent( false ); static void ReadCallback( IAsyncResult^ asynchronousResult ) { RequestState^ myRequestState = dynamic_cast<RequestState^>(asynchronousResult->AsyncState); WebRequest^ myWebRequest = myRequestState->request; // End of the Asynchronus request. Stream^ streamResponse = myWebRequest->EndGetRequestStream( asynchronousResult ); // Create a string that is to be posted to the uri. Console::WriteLine( "Please enter a string to be posted:" ); String^ postData = Console::ReadLine(); // Convert the string into a Byte array. array<Byte>^byteArray = Encoding::UTF8->GetBytes( postData ); // Write data to the stream. streamResponse->Write( byteArray, 0, postData->Length ); streamResponse->Close(); allDone->Set(); } }; int main() { // Create a new request to the mentioned URL. WebRequest^ myWebRequest = WebRequest::Create( "http://www.contoso.com" ); // Create an instance of the RequestState and assign 'myWebRequest' to its request field. RequestState^ myRequestState = gcnew RequestState; myRequestState->request = myWebRequest; myWebRequest->ContentType = "application/x-www-form-urlencoded"; // Set the 'Method' prperty to 'POST' to post data to a Uri. myRequestState->request->Method = "POST"; // Start the Asynchronous 'BeginGetRequestStream' method call. IAsyncResult^ r = dynamic_cast<IAsyncResult^>(myWebRequest->BeginGetRequestStream( gcnew AsyncCallback( WebRequest_BeginGetRequeststream::ReadCallback ), myRequestState )); WebRequest_BeginGetRequeststream::allDone->WaitOne(); WebResponse^ myWebResponse = myWebRequest->GetResponse(); Console::WriteLine( "The String* entered has been posted." ); Console::WriteLine( "Please wait for the response..." ); Stream^ streamResponse = myWebResponse->GetResponseStream(); StreamReader^ streamRead = gcnew StreamReader( streamResponse ); array<Char>^readBuff = gcnew array<Char>(256); int count = streamRead->Read( readBuff, 0, 256 ); Console::WriteLine( "The contents of the HTML page are " ); while ( count > 0 ) { String^ outputData = gcnew String( readBuff,0,count ); Console::Write( outputData ); count = streamRead->Read( readBuff, 0, 256 ); } streamResponse->Close(); streamRead->Close(); // Release the HttpWebResponse Resource. myWebResponse->Close(); }
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Note