EDN Admin
Well-known member
I want to use WebRequest object to post data from one web page to another.
After making the WebRequest call in the source page, referencing the request.form collection in the target page shows empty. I am confused. I expected to see the postdata information I sent
1.) Source page
<pre class="prettyprint Imports System.Net
Imports System.IO
Public Class DebugPostFromCode
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Private Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
Setup parameters used in the post
Dim username As String = IIf(Request.QueryString("USERNAME") Is Nothing, "gary", Request.QueryString("USERNAME"))
Dim location As String = IIf(Request.QueryString("LOCATION") Is Nothing, "florence", Request.QueryString("LOCATION"))
Dim iid As String = IIf(Request.QueryString("IID") Is Nothing, "123456789", Request.QueryString("IID"))
Dim client As String = IIf(Request.QueryString("CLIENT") Is Nothing, "Gary Motors", Request.QueryString("CLIENT"))
Setup the http request.
Dim wRequest As HttpWebRequest = WebRequest.Create("http://localhost/PayrollPlusMigration/DebugPost.aspx")
wRequest.Method = "POST"
Dim postData As String = String.Format("username={0}&location={1}&runIID={2}&clientName={3}", username, location, iid, client)
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
wRequest.ContentLength = byteArray.Length
wRequest.ContentType = "application/x-www-form-urlencoded"
wRequest.Referer = "pagename"
Write the data to the Stream object.
Dim dataStream As Stream
dataStream = wRequest.GetRequestStream()
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()
Send the request to the server by calling GetResponse.
Dim wResponse As WebResponse = wRequest.GetResponse()
Access response if desired.
Console.WriteLine(CType(wResponse, HttpWebResponse).StatusDescription)
dataStream = wResponse.GetResponseStream() Get the stream containing content returned by the server.
Dim reader As New StreamReader(dataStream) Open the stream using a StreamReader for easy access.
Dim responseFromServer As String = reader.ReadToEnd() Read the content.
Response.Write(responseFromServer) Display the content.
Clean up.
reader.Close()
dataStream.Close()
wResponse.Close()
End Sub
End Class[/code]
1a.) Source HTML
<pre class="prettyprint <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="DebugPostFromCode.aspx.vb" Inherits="PayrollPlusMigration.DebugPostFromCode" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml
<head runat="server
<title></title>
</head>
<body>
<form id="frmRedirect" runat="server
<asp:Button ID="Button1" runat="server" Text="Post" />
</form>
</body>
</html>
[/code]
2.) Target Web Page
<pre class="prettyprint Public Class DebugPost
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim sItem
Dim bolShowOutput As Boolean = True
Dim bolEndPageExecution As Boolean = True
What linebreak character do we need to use?
Dim strLineBreak
If bolShowOutput Then
We are showing the output, so set the line break character
to the HTML line breaking character
strLineBreak = "<br>"
Else
We are nesting the data dump in an HTML comment block, so
use the carraige return instead of <br>
Also start the HTML comment block
strLineBreak = vbCrLf
Response.Write("<!--" & strLineBreak)
End If
Response.Write(strLineBreak & strLineBreak)
Response.Write("DISPLAYING PAGE MISC" & strLineBreak)
Response.Write("ISPOSTBACK = [" & Page.IsPostBack.ToString & "]" & strLineBreak)
Response.Write("ISCALLBACK = [" & Page.IsCallback.ToString & "]" & strLineBreak)
Response.Write("ISCROSSPAGEPOSTBACK = [" & Page.IsCrossPagePostBack.ToString & "]" & strLineBreak)
Response.Write("IDENTITY = [" & Page.User.Identity.Name.ToString() & "]")
Response.Write(strLineBreak & strLineBreak)
Response.Write("DISPLAYING REQUEST.URLREFERRER" & strLineBreak)
Response.Write(Request.UrlReferrer)
Response.Write(strLineBreak & strLineBreak)
Response.Write("DISPLAYING REQUEST.FORM COLLECTION" & strLineBreak)
For Each sItem In Request.Form
Response.Write(sItem)
Response.Write(" - [" & Request.Form(sItem) & "]" & strLineBreak)
Next
Response.Write(strLineBreak & strLineBreak)
Response.Write("DISPLAYING REQUEST.PARAMS COLLECTION" & strLineBreak)
For Each sItem In Request.Params
Response.Write(sItem)
Response.Write(" - [" & Request.Params(sItem) & "]" & strLineBreak)
Next
Response.Write(strLineBreak & strLineBreak)
Response.Write("DISPLAYING REQUEST.QUERYSTRING COLLECTION" & strLineBreak)
For Each sItem In Request.QueryString
Response.Write(sItem)
Response.Write(" - [" & Request.QueryString(sItem) & "]" & strLineBreak)
Next
Response.Write(strLineBreak & strLineBreak)
Response.Write("DISPLAYING REQUEST.HEADERS COLLECTION" & strLineBreak)
For Each sItem In Request.Headers
Response.Write(sItem)
Response.Write(" - [" & Request.QueryString(sItem) & "]" & strLineBreak)
Next
If we are wanting to hide the output, display the closing
HTML comment tag
If Not bolShowOutput Then Response.Write(strLineBreak & "-->")
End page execution if needed
If bolEndPageExecution Then Response.End()
End Sub
End Class[/code]
2a. Target Html
<pre class="prettyprint <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="DebugPost.aspx.vb" Inherits="PayrollPlusMigration.DebugPost" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
<html xmlns="http://www.w3.org/1999/xhtml
<head runat="server
<title></title>
</head>
<body>
</body>
</html>
[/code]
<br/>
View the full article
After making the WebRequest call in the source page, referencing the request.form collection in the target page shows empty. I am confused. I expected to see the postdata information I sent
1.) Source page
<pre class="prettyprint Imports System.Net
Imports System.IO
Public Class DebugPostFromCode
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Private Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
Setup parameters used in the post
Dim username As String = IIf(Request.QueryString("USERNAME") Is Nothing, "gary", Request.QueryString("USERNAME"))
Dim location As String = IIf(Request.QueryString("LOCATION") Is Nothing, "florence", Request.QueryString("LOCATION"))
Dim iid As String = IIf(Request.QueryString("IID") Is Nothing, "123456789", Request.QueryString("IID"))
Dim client As String = IIf(Request.QueryString("CLIENT") Is Nothing, "Gary Motors", Request.QueryString("CLIENT"))
Setup the http request.
Dim wRequest As HttpWebRequest = WebRequest.Create("http://localhost/PayrollPlusMigration/DebugPost.aspx")
wRequest.Method = "POST"
Dim postData As String = String.Format("username={0}&location={1}&runIID={2}&clientName={3}", username, location, iid, client)
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
wRequest.ContentLength = byteArray.Length
wRequest.ContentType = "application/x-www-form-urlencoded"
wRequest.Referer = "pagename"
Write the data to the Stream object.
Dim dataStream As Stream
dataStream = wRequest.GetRequestStream()
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()
Send the request to the server by calling GetResponse.
Dim wResponse As WebResponse = wRequest.GetResponse()
Access response if desired.
Console.WriteLine(CType(wResponse, HttpWebResponse).StatusDescription)
dataStream = wResponse.GetResponseStream() Get the stream containing content returned by the server.
Dim reader As New StreamReader(dataStream) Open the stream using a StreamReader for easy access.
Dim responseFromServer As String = reader.ReadToEnd() Read the content.
Response.Write(responseFromServer) Display the content.
Clean up.
reader.Close()
dataStream.Close()
wResponse.Close()
End Sub
End Class[/code]
1a.) Source HTML
<pre class="prettyprint <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="DebugPostFromCode.aspx.vb" Inherits="PayrollPlusMigration.DebugPostFromCode" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml
<head runat="server
<title></title>
</head>
<body>
<form id="frmRedirect" runat="server
<asp:Button ID="Button1" runat="server" Text="Post" />
</form>
</body>
</html>
[/code]
2.) Target Web Page
<pre class="prettyprint Public Class DebugPost
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim sItem
Dim bolShowOutput As Boolean = True
Dim bolEndPageExecution As Boolean = True
What linebreak character do we need to use?
Dim strLineBreak
If bolShowOutput Then
We are showing the output, so set the line break character
to the HTML line breaking character
strLineBreak = "<br>"
Else
We are nesting the data dump in an HTML comment block, so
use the carraige return instead of <br>
Also start the HTML comment block
strLineBreak = vbCrLf
Response.Write("<!--" & strLineBreak)
End If
Response.Write(strLineBreak & strLineBreak)
Response.Write("DISPLAYING PAGE MISC" & strLineBreak)
Response.Write("ISPOSTBACK = [" & Page.IsPostBack.ToString & "]" & strLineBreak)
Response.Write("ISCALLBACK = [" & Page.IsCallback.ToString & "]" & strLineBreak)
Response.Write("ISCROSSPAGEPOSTBACK = [" & Page.IsCrossPagePostBack.ToString & "]" & strLineBreak)
Response.Write("IDENTITY = [" & Page.User.Identity.Name.ToString() & "]")
Response.Write(strLineBreak & strLineBreak)
Response.Write("DISPLAYING REQUEST.URLREFERRER" & strLineBreak)
Response.Write(Request.UrlReferrer)
Response.Write(strLineBreak & strLineBreak)
Response.Write("DISPLAYING REQUEST.FORM COLLECTION" & strLineBreak)
For Each sItem In Request.Form
Response.Write(sItem)
Response.Write(" - [" & Request.Form(sItem) & "]" & strLineBreak)
Next
Response.Write(strLineBreak & strLineBreak)
Response.Write("DISPLAYING REQUEST.PARAMS COLLECTION" & strLineBreak)
For Each sItem In Request.Params
Response.Write(sItem)
Response.Write(" - [" & Request.Params(sItem) & "]" & strLineBreak)
Next
Response.Write(strLineBreak & strLineBreak)
Response.Write("DISPLAYING REQUEST.QUERYSTRING COLLECTION" & strLineBreak)
For Each sItem In Request.QueryString
Response.Write(sItem)
Response.Write(" - [" & Request.QueryString(sItem) & "]" & strLineBreak)
Next
Response.Write(strLineBreak & strLineBreak)
Response.Write("DISPLAYING REQUEST.HEADERS COLLECTION" & strLineBreak)
For Each sItem In Request.Headers
Response.Write(sItem)
Response.Write(" - [" & Request.QueryString(sItem) & "]" & strLineBreak)
Next
If we are wanting to hide the output, display the closing
HTML comment tag
If Not bolShowOutput Then Response.Write(strLineBreak & "-->")
End page execution if needed
If bolEndPageExecution Then Response.End()
End Sub
End Class[/code]
2a. Target Html
<pre class="prettyprint <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="DebugPost.aspx.vb" Inherits="PayrollPlusMigration.DebugPost" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
<html xmlns="http://www.w3.org/1999/xhtml
<head runat="server
<title></title>
</head>
<body>
</body>
</html>
[/code]
<br/>
View the full article