HttpWebRequest.EndGetRequestStream 方法

定义

结束对用于写入数据的 Stream 对象的异步请求。Ends an asynchronous request for a Stream object to use to write data.

重载

EndGetRequestStream(IAsyncResult, TransportContext)

结束对用于写入数据的 Stream 对象的异步请求,并输出与该流关联的 TransportContextEnds an asynchronous request for a Stream object to use to write data and outputs the TransportContext associated with the stream.

EndGetRequestStream(IAsyncResult)

结束对用来写入数据的 Stream 对象的异步请求。Ends an asynchronous request for a Stream object to use to write data.

EndGetRequestStream(IAsyncResult, TransportContext)

结束对用于写入数据的 Stream 对象的异步请求,并输出与该流关联的 TransportContextEnds an asynchronous request for a Stream object to use to write data and outputs the TransportContext associated with the stream.

public:
 System::IO::Stream ^ EndGetRequestStream(IAsyncResult ^ asyncResult, [Runtime::InteropServices::Out] System::Net::TransportContext ^ % context);
public:
 System::IO::Stream ^ EndGetRequestStream(IAsyncResult ^ asyncResult, [Runtime::InteropServices::Out] System::Net::TransportContext ^ % transportContext);
public System.IO.Stream EndGetRequestStream (IAsyncResult asyncResult, out System.Net.TransportContext context);
public System.IO.Stream EndGetRequestStream (IAsyncResult asyncResult, out System.Net.TransportContext transportContext);
override this.EndGetRequestStream : IAsyncResult * TransportContext -> System.IO.Stream
override this.EndGetRequestStream : IAsyncResult * TransportContext -> System.IO.Stream
Public Function EndGetRequestStream (asyncResult As IAsyncResult, ByRef context As TransportContext) As Stream
Public Function EndGetRequestStream (asyncResult As IAsyncResult, ByRef transportContext As TransportContext) As Stream

参数

asyncResult
IAsyncResult

对流的挂起请求。The pending request for a stream.

contexttransportContext
TransportContext

TransportContextStreamThe TransportContext for the Stream.

返回

用于写入请求数据的 StreamA Stream to use to write request data.

例外

当前实例没有从对 BeginGetRequestStream(AsyncCallback, Object) 的调用返回 asyncResultasyncResult was not returned by the current instance from a call to BeginGetRequestStream(AsyncCallback, Object).

asyncResultnullasyncResult is null.

以前使用 asyncResult 调用过此方法。This method was called previously using asyncResult.

请求未完成,没有可用的流。The request did not complete, and no stream is available.

之前已调用 Abort()Abort() was previously called.

- 或 --or- 处理请求时出错。An error occurred while processing the request.

注解

EndGetRequestStream 方法完成 BeginGetRequestStream 方法启动的流的异步请求,并输出与该流关联的 TransportContextThe EndGetRequestStream method completes an asynchronous request for a stream that was started by the BeginGetRequestStream method and outputs the TransportContext associated with the stream. 返回 Stream 对象之后,你可以使用 Stream.Write 方法通过 HttpWebRequest 发送数据。After the Stream object has been returned, you can send data with the HttpWebRequest by using the Stream.Write method.

某些使用具有扩展保护的集成 Windows 身份验证的应用程序可能需要能够查询 HttpWebRequest 使用的传输层,以便从基础 TLS 通道检索通道绑定令牌(CBT)。Some applications that use integrated Windows authentication with extended protection may need to be able to query the transport layer used by HttpWebRequest in order to retrieve the channel binding token (CBT) from the underlying TLS channel. GetRequestStream 方法为具有请求正文的 HTTP 方法(POSTPUT 请求)提供对此信息的访问。The GetRequestStream method provides access to this information for HTTP methods which have a request body (POST and PUT requests). 仅当应用程序要实现其自己的身份验证并需要访问 CBT 时,才需要此权限。This is only needed if the application is implementing its own authentication and needs access to the CBT.

备注

如果应用程序需要设置 ContentLength 属性的值,则必须在检索流并向其写入数据之前完成此操作。If an application needs to set the value of the ContentLength property, then this must be done before retrieving the stream and writing data to it.

注意

必须调用 Stream.Close 方法来关闭流并释放连接以供重用。You must call the Stream.Close method to close the stream and release the connection for reuse. 未能关闭流将导致应用程序无法连接。Failure to close the stream causes your application to run out of connections.

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。This member outputs trace information when you enable network tracing in your application. 有关详细信息,请参阅.NET Framework 中的网络跟踪For more information, see Network Tracing in the .NET Framework.

另请参阅

EndGetRequestStream(IAsyncResult)

结束对用来写入数据的 Stream 对象的异步请求。Ends an asynchronous request for a Stream object to use to write data.

public:
 override System::IO::Stream ^ EndGetRequestStream(IAsyncResult ^ asyncResult);
public override System.IO.Stream EndGetRequestStream (IAsyncResult asyncResult);
override this.EndGetRequestStream : IAsyncResult -> System.IO.Stream
Public Overrides Function EndGetRequestStream (asyncResult As IAsyncResult) As Stream

参数

asyncResult
IAsyncResult

流的待定的请求。The pending request for a stream.

返回

用于写入请求数据的 StreamA Stream to use to write request data.

例外

asyncResultnullasyncResult is null.

请求未完成,没有可用的流。The request did not complete, and no stream is available.

当前实例没有从对 BeginGetRequestStream(AsyncCallback, Object) 的调用返回 asyncResultasyncResult was not returned by the current instance from a call to BeginGetRequestStream(AsyncCallback, Object).

以前使用 asyncResult 调用过此方法。This method was called previously using asyncResult.

之前已调用 Abort()Abort() was previously called.

- 或 --or- 处理请求时出错。An error occurred while processing the request.

示例

下面的代码示例使用 EndGetRequestStream 方法结束对流实例的异步请求。The following code example uses the EndGetRequestStream method to end an asynchronous request for a stream instance.

#using <System.dll>

using namespace System;
using namespace System::Net;
using namespace System::IO;
using namespace System::Text;
using namespace System::Threading;
ref class HttpWebRequestBeginGetRequest
{
public:
   static ManualResetEvent^ allDone = gcnew ManualResetEvent( false );
   static void Main()
   {
      
      // Create a new HttpWebRequest object.
      HttpWebRequest^ request = dynamic_cast<HttpWebRequest^>(WebRequest::Create( "http://www.contoso.com/example.aspx" ));
      
      // Set the ContentType property.
      request->ContentType = "application/x-www-form-urlencoded";
      
      // Set the Method property to 'POST' to post data to the Uri.
      request->Method = "POST";
      
      // Start the asynchronous operation.    
      AsyncCallback^ del = gcnew AsyncCallback(GetRequestStreamCallback);
      request->BeginGetRequestStream( del, request );
      
      // Keep the main thread from continuing while the asynchronous
      // operation completes. A real world application
      // could do something useful such as updating its user interface. 
      allDone->WaitOne();
    }
      

private:
    static void GetRequestStreamCallback(IAsyncResult^ asynchronousResult)
    {
        HttpWebRequest^ request = dynamic_cast<HttpWebRequest^>(asynchronousResult->AsyncState);
        
        // End the operation
        Stream^ postStream = request->EndGetRequestStream(asynchronousResult);

        Console::WriteLine("Please enter the input data to be posted:");
        String^ postData = Console::ReadLine();

        // Convert the string into a byte array.
        array<Byte>^ByteArray = Encoding::UTF8->GetBytes(postData);

        // Write to the request stream.
        postStream->Write(ByteArray, 0, postData->Length);
        postStream->Close();

        // Start the asynchronous operation to get the response
        AsyncCallback^ del = gcnew AsyncCallback(GetResponseCallback);
        request->BeginGetResponse(del, request);
    }

   static void GetResponseCallback(IAsyncResult^ asynchronousResult)
   {
      HttpWebRequest^ request = dynamic_cast<HttpWebRequest^>(asynchronousResult->AsyncState);

      // End the operation
      HttpWebResponse^ response = dynamic_cast<HttpWebResponse^>(request->EndGetResponse(asynchronousResult));
      Stream^ streamResponse = response->GetResponseStream();
      StreamReader^ streamRead = gcnew StreamReader(streamResponse);
      String^ responseString = streamRead->ReadToEnd();
      Console::WriteLine(responseString);
      // Close the stream object
      streamResponse->Close();
      streamRead->Close();

      // Release the HttpWebResponse
      response->Close();
      allDone->Set();
   }
};

void main()
{
   HttpWebRequestBeginGetRequest::Main();
}

using System;
using System.Net;
using System.IO;
using System.Text;
using System.Threading;

class HttpWebRequestBeginGetRequest
{
    private static ManualResetEvent allDone = new ManualResetEvent(false);

    public static void Main(string[] args)
    {


        // Create a new HttpWebRequest object.
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com/example.aspx");

        request.ContentType = "application/x-www-form-urlencoded";

        // Set the Method property to 'POST' to post data to the URI.
        request.Method = "POST";

        // start the asynchronous operation
        request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);

        // Keep the main thread from continuing while the asynchronous
        // operation completes. A real world application
        // could do something useful such as updating its user interface. 
        allDone.WaitOne();
    }

    private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
    {
        HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
        
        // End the operation
        Stream postStream = request.EndGetRequestStream(asynchronousResult);

        Console.WriteLine("Please enter the input data to be posted:");
        string postData = Console.ReadLine();

        // Convert the string into a byte array.
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);

        // Write to the request stream.
        postStream.Write(byteArray, 0, postData.Length);
        postStream.Close();

        // Start the asynchronous operation to get the response
        request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
    }

    private static void GetResponseCallback(IAsyncResult asynchronousResult)
    {
        HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

        // End the operation
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
        Stream streamResponse = response.GetResponseStream();
        StreamReader streamRead = new StreamReader(streamResponse);
        string responseString = streamRead.ReadToEnd();
        Console.WriteLine(responseString);
        // Close the stream object
        streamResponse.Close();
        streamRead.Close();

        // Release the HttpWebResponse
        response.Close();
        allDone.Set();
    }
}
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Threading

Class HttpWebRequestBeginGetRequest
    Public Shared allDone As New ManualResetEvent(False)

    Shared Sub Main()


        ' Create a new HttpWebRequest object.
        Dim request As HttpWebRequest = CType(WebRequest.Create("http://www.contoso.com/example.aspx"), _
                 HttpWebRequest)

        ' Set the ContentType property.
        request.ContentType = "application/x-www-form-urlencoded"

        '  Set the Method property to 'POST' to post data to the URI.
        request.Method = "POST"

        ' Start the asynchronous operation.		
        Dim result As IAsyncResult = _
            CType(request.BeginGetRequestStream(AddressOf GetRequestStreamCallback, request), _
            IAsyncResult)

        ' Keep the main thread from continuing while the asynchronous
        ' operation completes. A real world application
        ' could do something useful such as updating its user interface. 
        allDone.WaitOne()
    End Sub

    Private Shared Sub GetRequestStreamCallback(ByVal asynchronousResult As IAsyncResult)
        Dim request As HttpWebRequest = CType(asynchronousResult.AsyncState, HttpWebRequest)
        
        ' End the operation
        Dim postStream As Stream = request.EndGetRequestStream(asynchronousResult)
        Console.WriteLine("Please enter the input data to be posted:")
        Dim postData As [String] = Console.ReadLine()
        
        '  Convert the string into byte array.
        Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)

        ' Write to the stream.
        postStream.Write(byteArray, 0, postData.Length)
        postStream.Close()

        ' Start the asynchronous operation to get the response
        Dim result As IAsyncResult = _
            CType(request.BeginGetResponse(AddressOf GetResponseCallback, request), _
            IAsyncResult)
    End Sub

    Private Shared Sub GetResponseCallback(ByVal asynchronousResult As IAsyncResult)
        Dim request As HttpWebRequest = CType(asynchronousResult.AsyncState, HttpWebRequest)
        
        '  Get the response.
        Dim response As HttpWebResponse = CType(request.EndGetResponse(asynchronousResult), _
           HttpWebResponse)
        
        Dim streamResponse As Stream = response.GetResponseStream()
        Dim streamRead As New StreamReader(streamResponse)
        Dim responseString As String = streamRead.ReadToEnd()
        
        Console.WriteLine(responseString)
        
        ' Close Stream object.
        streamResponse.Close()
        streamRead.Close()

        ' Release the HttpWebResponse.
        allDone.Set()
        response.Close()
    End Sub
            
End Class

注解

EndGetRequestStream 方法完成 BeginGetRequestStream 方法启动的流的异步请求。The EndGetRequestStream method completes an asynchronous request for a stream that was started by the BeginGetRequestStream method. 返回 Stream 对象之后,你可以使用 Stream.Write 方法通过 HttpWebRequest 发送数据。After the Stream object has been returned, you can send data with the HttpWebRequest by using the Stream.Write method.

备注

在将数据写入流之前,必须设置 ContentLength 属性的值。You must set the value of the ContentLength property before writing data to the stream.

注意

必须调用 Stream.Close 方法来关闭流并释放连接以供重用。You must call the Stream.Close method to close the stream and release the connection for reuse. 未能关闭流将导致应用程序无法连接。Failure to close the stream causes your application to run out of connections.

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。This member outputs trace information when you enable network tracing in your application. 有关详细信息,请参阅.NET Framework 中的网络跟踪For more information, see Network Tracing in the .NET Framework.

适用于