HttpWebRequest.GetRequestStream 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得用來寫入要求數據的 Stream 物件。
多載
GetRequestStream() |
取得用來寫入要求數據的 Stream 物件。 |
GetRequestStream(TransportContext) |
取得 Stream 物件,用來寫入要求數據,並輸出與數據流相關聯的 TransportContext。 |
GetRequestStream()
取得用來寫入要求數據的 Stream 物件。
public:
override System::IO::Stream ^ GetRequestStream();
public override System.IO.Stream GetRequestStream ();
override this.GetRequestStream : unit -> System.IO.Stream
Public Overrides Function GetRequestStream () As Stream
傳回
用來寫入要求數據的 Stream。
例外狀況
Method 屬性為 GET 或 HEAD。
-或-
KeepAlive 是 true
,AllowWriteStreamBuffering 是 false
,ContentLength 為 -1,SendChunked 為 false
,而 Method 為 POST 或 PUT。
要求快取驗證程式表示可從快取提供此要求的回應;不過,寫入數據的要求不得使用快取。 如果您使用未正確實作的自定義快取驗證程式,就可能發生此例外狀況。
在 .NET Compact Framework 應用程式中,未正確取得並關閉內容長度為零的要求數據流。 如需處理零內容長度要求的詳細資訊,請參閱 .NET Compact Framework中的
範例
下列程式代碼範例會使用 GetRequestStream 方法來傳回數據流實例。
// Set the 'Method' property of the 'Webrequest' to 'POST'.
myHttpWebRequest->Method = "POST";
Console::WriteLine( "\nPlease enter the data to be posted to the (http://www.contoso.com/codesnippets/next.asp) Uri :" );
// Create a new String* Object* to POST data to the Url.
String^ inputData = Console::ReadLine();
String^ postData = String::Concat( "firstone= ", inputData );
ASCIIEncoding^ encoding = gcnew ASCIIEncoding;
array<Byte>^ byte1 = encoding->GetBytes( postData );
// Set the content type of the data being posted.
myHttpWebRequest->ContentType = "application/x-www-form-urlencoded";
// Set the content length of the String* being posted.
myHttpWebRequest->ContentLength = byte1->Length;
Stream^ newStream = myHttpWebRequest->GetRequestStream();
newStream->Write( byte1, 0, byte1->Length );
Console::WriteLine( "The value of 'ContentLength' property after sending the data is {0}", myHttpWebRequest->ContentLength );
// Close the Stream Object*.
newStream->Close();
// Set the 'Method' property of the 'Webrequest' to 'POST'.
myHttpWebRequest.Method = "POST";
Console.WriteLine ("\nPlease enter the data to be posted to the (http://www.contoso.com/codesnippets/next.asp) Uri :");
// Create a new string object to POST data to the Url.
string inputData = Console.ReadLine ();
string postData = "firstone=" + inputData;
ASCIIEncoding encoding = new ASCIIEncoding ();
byte[] byte1 = encoding.GetBytes (postData);
// Set the content type of the data being posted.
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
// Set the content length of the string being posted.
myHttpWebRequest.ContentLength = byte1.Length;
Stream newStream = myHttpWebRequest.GetRequestStream ();
newStream.Write (byte1, 0, byte1.Length);
Console.WriteLine ("The value of 'ContentLength' property after sending the data is {0}", myHttpWebRequest.ContentLength);
// Close the Stream object.
newStream.Close ();
' Set the 'Method' property of the 'Webrequest' to 'POST'.
myHttpWebRequest.Method = "POST"
Console.WriteLine(ControlChars.Cr + "Please enter the data to be posted to the (http://www.contoso.com/codesnippets/next.asp) Uri :")
' Create a new string object to POST data to the Url.
Dim inputData As String = Console.ReadLine()
Dim postData As String = "firstone" + ChrW(61) + inputData
Dim encoding As New ASCIIEncoding()
Dim byte1 As Byte() = encoding.GetBytes(postData)
' Set the content type of the data being posted.
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"
' Set the content length of the string being posted.
myHttpWebRequest.ContentLength = byte1.Length
Dim newStream As Stream = myHttpWebRequest.GetRequestStream()
newStream.Write(byte1, 0, byte1.Length)
Console.WriteLine("The value of 'ContentLength' property after sending the data is {0}", myHttpWebRequest.ContentLength)
newStream.Close()
備註
謹慎
WebRequest
、HttpWebRequest
、ServicePoint
和 WebClient
已經過時,您不應該將它們用於新的開發。 請改用 HttpClient。
GetRequestStream 方法會傳回數據流,用來傳送 HttpWebRequest的數據。 傳回 Stream 物件之後,您可以使用 Stream.Write 方法,以 HttpWebRequest 傳送數據。
如果應用程式需要設定 ContentLength 屬性的值,則必須先完成此動作,才能擷取數據流。
您必須呼叫 Stream.Close 方法來關閉數據流,並釋放連接以供重複使用。 無法關閉資料流會導致應用程式用盡連線。
注意
您的應用程式無法混合特定要求的同步和異步方法。 如果您呼叫 GetRequestStream 方法,則必須使用 GetResponse 方法來擷取回應。
注意
當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework中的
另請參閱
適用於
GetRequestStream(TransportContext)
取得 Stream 物件,用來寫入要求數據,並輸出與數據流相關聯的 TransportContext。
public:
System::IO::Stream ^ GetRequestStream([Runtime::InteropServices::Out] System::Net::TransportContext ^ % context);
public System.IO.Stream GetRequestStream (out System.Net.TransportContext? context);
public System.IO.Stream GetRequestStream (out System.Net.TransportContext context);
override this.GetRequestStream : TransportContext -> System.IO.Stream
Public Function GetRequestStream (ByRef context As TransportContext) As Stream
參數
- context
- TransportContext
傳回
用來寫入要求數據的 Stream。
例外狀況
GetRequestStream() 方法無法取得 Stream。
要求快取驗證程式表示可從快取提供此要求的回應;不過,寫入數據的要求不得使用快取。 如果您使用未正確實作的自定義快取驗證程式,就可能發生此例外狀況。
Method 屬性為 GET 或 HEAD。
-或-
KeepAlive 是 true
,AllowWriteStreamBuffering 是 false
,ContentLength 為 -1,SendChunked 為 false
,而 Method 為 POST 或 PUT。
備註
謹慎
WebRequest
、HttpWebRequest
、ServicePoint
和 WebClient
已經過時,您不應該將它們用於新的開發。 請改用 HttpClient。
GetRequestStream 方法會傳回數據流,用來傳送 HttpWebRequest 的數據,並輸出與數據流相關聯的 TransportContext。 傳回 Stream 物件之後,您可以使用 Stream.Write 方法,以 HttpWebRequest 傳送數據。
某些使用整合式 Windows 驗證搭配擴充保護的應用程式可能需要能夠查詢 HttpWebRequest 所使用的傳輸層,才能從基礎 TLS 通道擷取通道系結令牌 (CBT)。
GetRequestStream 方法會針對具有要求本文的 HTTP 方法提供此資訊的存取權(POST
和 PUT
要求)。 只有在應用程式實作自己的驗證,且需要存取 CBT 時,才需要此專案。
如果應用程式需要設定 ContentLength 屬性的值,則必須先完成此動作,才能擷取數據流。
您必須呼叫 Stream.Close 方法來關閉數據流,並釋放連接以供重複使用。 無法關閉資料流會導致應用程式用盡連線。
注意
您的應用程式無法混合特定要求的同步和異步方法。 如果您呼叫 GetRequestStream 方法,則必須使用 GetResponse 方法來擷取回應。
注意
當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework中的
另請參閱
- TransportContext
- GetChannelBinding(ChannelBindingKind)
- System.Security.Authentication.ExtendedProtection
- ChannelBinding
- 整合式 Windows 驗證與擴充保護