HttpWebRequest.EndGetRequestStream 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
结束对用来写入数据的 Stream 对象的异步请求。
重载
EndGetRequestStream(IAsyncResult, TransportContext) |
结束对用于写入数据的 Stream 对象的异步请求,并输出与该流关联的 TransportContext。 |
EndGetRequestStream(IAsyncResult) |
结束对用来写入数据的 Stream 对象的异步请求。 |
EndGetRequestStream(IAsyncResult, TransportContext)
- Source:
- HttpWebRequest.cs
- Source:
- HttpWebRequest.cs
- Source:
- HttpWebRequest.cs
结束对用于写入数据的 Stream 对象的异步请求,并输出与该流关联的 TransportContext。
public:
System::IO::Stream ^ EndGetRequestStream(IAsyncResult ^ asyncResult, [Runtime::InteropServices::Out] System::Net::TransportContext ^ % context);
public System.IO.Stream EndGetRequestStream (IAsyncResult asyncResult, out System.Net.TransportContext? context);
public System.IO.Stream EndGetRequestStream (IAsyncResult asyncResult, out System.Net.TransportContext context);
override this.EndGetRequestStream : IAsyncResult * TransportContext -> System.IO.Stream
Public Function EndGetRequestStream (asyncResult As IAsyncResult, ByRef context As TransportContext) As Stream
参数
- asyncResult
- IAsyncResult
对流的挂起请求。
- context
- TransportContext
返回
用于写入请求数据的 Stream。
例外
当前实例没有从对 BeginGetRequestStream(AsyncCallback, Object) 的调用返回 asyncResult
。
asyncResult
为 null
。
以前使用 asyncResult
调用过此方法。
请求未完成,没有可用的流。
注解
方法 EndGetRequestStream 完成对由 方法启动的流的异步请求, BeginGetRequestStream 并输出 TransportContext 与该流关联的 。 Stream返回 对象后,可以使用 方法通过 HttpWebRequestStream.Write 发送数据。
某些使用具有扩展保护的集成 Windows 身份验证的应用程序可能需要能够查询 使用的 HttpWebRequest 传输层,以便从基础 TLS 通道检索通道绑定令牌 (CBT) 。 方法 GetRequestStream 为 HTTP 方法提供对此信息的访问,这些方法具有请求正文 (POST
和 PUT
请求) 。 仅当应用程序实现自己的身份验证并需要访问 CBT 时,才需要此项。
注意
如果应用程序需要设置 属性的值 ContentLength ,则必须在检索流并向其写入数据之前完成此操作。
注意
必须调用 Stream.Close 方法来关闭流并释放连接以供重复使用。 未能关闭流会导致应用程序连接不足。
备注
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
另请参阅
- TransportContext
- GetChannelBinding(ChannelBindingKind)
- System.Security.Authentication.ExtendedProtection
- ChannelBinding
- 具有扩展保护的集成 Windows 身份验证
适用于
EndGetRequestStream(IAsyncResult)
- Source:
- HttpWebRequest.cs
- Source:
- HttpWebRequest.cs
- Source:
- HttpWebRequest.cs
结束对用来写入数据的 Stream 对象的异步请求。
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
对流的挂起请求。
返回
用于写入请求数据的 Stream。
例外
asyncResult
为 null
。
请求未完成,没有可用的流。
当前实例没有从对 BeginGetRequestStream(AsyncCallback, Object) 的调用返回 asyncResult
。
以前使用 asyncResult
调用过此方法。
示例
下面的代码示例使用 EndGetRequestStream 方法结束对流实例的异步请求。
#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 方法启动的流的异步请求。 Stream返回 对象后,可以使用 方法通过 HttpWebRequestStream.Write 发送数据。
注意
在将数据写入流之前, ContentLength 必须设置 属性的值。
注意
必须调用 Stream.Close 方法来关闭流并释放连接以供重复使用。 未能关闭流会导致应用程序连接不足。
备注
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
适用于
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈