Click here to Skip to main content
Licence CPOL
First Posted 18 May 2005
Views 205,225
Bookmarked 55 times

Post XML Data to an ASP.NET Page using C#

By | 18 May 2005 | Article
This article describes the function to post XML data to an ASP.NET page and then read the data on an ASP.NET page

Code For Posting

To post XML, use the following function:

   WebRequest req = null;
   WebResponse rsp = null;
   try
   {
    string fileName = "C:\test.xml";
    string uri = "http://localhost/PostXml/Default.aspx";
    req = WebRequest.Create(uri);
    //req.Proxy = WebProxy.GetDefaultProxy(); // Enable if using proxy
    req.Method = "POST";        // Post method
    req.ContentType = "text/xml";     // content type
    // Wrap the request stream with a text-based writer
    StreamWriter writer = new StreamWriter(req.GetRequestStream());
    // Write the XML text into the stream
    writer.WriteLine(this.GetTextFromXMLFile(fileName));
    writer.Close();
    // Send the data to the webserver
    rsp = req.GetResponse();
    
   }
   catch(WebException webEx)
   {
    
   }
   catch(Exception ex)
   {
    
   }
   finally
   {
    if(req != null) req.GetRequestStream().Close();
    if(rsp != null) rsp.GetResponseStream().Close();
   }Function to read xml data from local system
  /// <summary>
  /// Read XML data from file
  /// </summary>
  /// <param name="file"></param>
  /// <returns>returns file content in XML string format</returns>
  private string GetTextFromXMLFile(string file)
  {
   StreamReader reader = new StreamReader(file);
   string ret = reader.ReadToEnd();
   reader.Close();
   return ret;
  }

Code For Reading Posted Data

Now, on the Web server in the ASP.NET page, write the following code to access the posted data:

private void Page_Load(object sender, EventArgs e)
  {
     page.Response.ContentType = "text/xml";
    // Read XML posted via HTTP
    StreamReader reader = new StreamReader(page.Request.InputStream);
    String xmlData = reader.ReadToEnd(); 
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

S Sansanwal

Architect

Australia Australia

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralRedirect to the page Pinmemberhichamveo22:36 10 Feb '10  
GeneralMy vote of 1 PinmemberReza Qorbani13:56 23 Jan '10  
GeneralRe: My vote of 1 PinmemberPinhead_Me14:31 10 Mar '11  
GeneralThanks Pinmembertheonlyremedy1:14 5 Nov '09  
GeneralThanks Pinmemberredware.com0:09 2 Nov '09  
GeneralNice Pinmembersashidhar19:49 8 Oct '09  
GeneralCode please PinmemberFanie1:17 23 Sep '09  
GeneralRe: Code please PinmemberS Sansanwal19:10 23 Sep '09  
GeneralThanks for the code PinmemberSarif Bin Ishak22:11 28 Jul '09  
Questionhow to post a string to an URL Pinmembernaveen_bij22:15 23 Dec '08  
QuestionHow to get the values from the database into a html page using C#.Net Pinmembersatyaanand.andra@gmail.com20:52 29 Jun '08  
AnswerRe: How to get the values from the database into a html page using C#.Net PinmemberS Sansanwal0:44 30 Jun '08  
GeneralRe: How to get the values from the database into a html page using C#.Net Pinmembersatyaanand.andra@gmail.com2:11 30 Jun '08  
QuestionTrouble with the server side code? PinmemberSamsingh9:39 26 Jun '08  
QuestionBy the way, this used to work under IIS 5, but now under 6 it doesn't anymore. Pinmemberepastorejr0:21 2 Nov '06  
I've got this piece of code, originated from Alex Feinman, which is intended to upload XML files from Pocket PC to an IIS virtual directory. It used to run smoothly under IIS 5, but as soon as I put it to run under IIS 6 it refused to work. The log file tells me that :
 
2006-11-01 14:52:59 192.168.0.38 1224 192.168.0.11 80 HTTP/1.1 PUT /tr/0220061101122605000000001JR.xml 400 1 BadRequest DefaultAppPool
2006-11-01 14:53:43 192.168.0.38 1224 192.168.0.11 80 HTTP/1.1 PUT /tr/0220061101122605000000001JR.xml 400 1 Connection_Dropped DefaultAppPool
2006-11-01 14:58:41 192.168.0.38 1236 192.168.0.11 80 HTTP/0.0 Invalid - 400 - Verb -
2006-11-01 14:58:45 192.168.0.38 1237 192.168.0.11 80 HTTP/0.0 Invalid - 400 - Verb -

 
and once :
 

2006-11-01 14:52:59 192.168.0.38 1224 192.168.0.11 80 HTTP/1.1 PUT /tr/0220061101122605000000001JR.xml 400 1 BadRequest DefaultAppPool
2006-11-01 14:53:43 192.168.0.38 1224 192.168.0.11 80 HTTP/1.1 PUT /tr/0220061101122605000000001JR.xml 400 1 Connection_Dropped DefaultAppPool
2006-11-01 14:58:41 192.168.0.38 1236 192.168.0.11 80 HTTP/0.0 Invalid - 400 - Verb -
2006-11-01 14:58:45 192.168.0.38 1237 192.168.0.11 80 HTTP/0.0 Invalid - 400 - Verb -

 

Now, is there anything I can do to make it run under IIS 6 ? Dead | X|
 
Code follows. Thanks very much !
 
Jr
 

 
Public Function UploadIt(Optional ByVal logErrors As Boolean = False) As Integer
'Alex Feinman code next
Dim i, j As Integer
Dim data As String
Dim Url As String
Dim mstrFilename As String
Dim req As HttpWebRequest
Dim resp As HttpWebResponse ' = Nothing
Dim reqStream As Stream
Dim code As HttpStatusCode
Dim ascii As Encoding
Dim mblnFileRead As Boolean
Dim muriURI As Uri
Dim mblnFileSent As Boolean
Dim mblnURIOk As Boolean
If Me.Files.Count = 0 Or mstrWhereTo = "" Then Exit Function
j = Me.Files.Count - 1
Url = mstrWhereTo
If Right(Url, 1) <> "/" Then
Url = Url & "/"
End If
ascii = Encoding.ASCII
For i = 0 To j
Try
Dim rdr As New StreamReader(Me.Files.Item(i).FileNameAndPath)
data = rdr.ReadToEnd
rdr.Close()
rdr = Nothing
mblnFileRead = True
Catch ex As Exception
If logErrors Then
TextLogger.Log(ex.Message & " in HTTPUpload.UploadIt (data assignment)")
End If
mblnFileRead = False
End Try
If mblnFileRead Then
'Build the target url from the virtual directory and file name
mstrFilename = Path.GetFileName(Me.Files.Item(i).FileNameAndPath)
'If web server is running UrlScan it will reject .exe file as an unsafe extension
'If Path.GetExtension(mstrFilename) = ".exe" Then
'mstrFilename = Path.ChangeExtension(mstrFilename, "ex_")
'End If
'Make sure the url is properly escaped. Uri class takes care of that
Try
muriURI = New Uri(Url & mstrFilename)
req = WebRequest.Create(muriURI) 'HttpWebRequest.Create(muriURI)
muriURI = Nothing
mblnURIOk = True
Catch ufwe As UriFormatException
If logErrors Then
TextLogger.Log(ufwe.Message & " in HTTPUpload.UploadIt (URI and WebRequest instantiation)")
End If
mblnURIOk = False
Catch ex As Exception
If logErrors Then
TextLogger.Log(ex.Message & " in HTTPUpload.UploadIt (URI and WebRequest instantiation)")
End If
mblnURIOk = False
End Try
If mblnURIOk Then
'req.Pipelined = True
'req.KeepAlive = True
req.Method = "PUT"
req.AllowWriteStreamBuffering = True
req.ContentType = "text/xml"
req.Timeout = 1 * 30 * 1000 'half a minute timeout
'req = CType(WebRequest.Create(Url), HttpWebRequest)
'req = CType(WebRequest.Create(mstrWhereTo), HttpWebRequest)
If mstrUserName <> "" And mstrPassword <> "" Then
'req.AllowWriteStreamBuffering = True
req.Credentials = New NetworkCredential(mstrUserName, mstrPassword)
'Else
'req.Credentials = CredentialCache.DefaultCredentials
End If
'For large files (> 50KB) you may want to uncomment the next line
'req.SendChunked = true;
req.ContentLength = data.Length
Try
reqStream = req.GetRequestStream()
Dim maContents() As Byte = ascii.GetBytes(data)
reqStream.Write(maContents, 0, maContents.Length) 'data.Length)
reqStream.Flush()
reqStream.Close()
'reqStream = Nothing
maContents = Nothing
mblnFileSent = True
Me.Files.Item(i).Sent = True
Catch wex As WebException
If logErrors Then
TextLogger.Log(wex.Message & " in HTTPUpload.UploadIt (WebException in GetRequestStream)")
End If
mblnFileSent = False
Catch ufwe As UriFormatException
If logErrors Then
TextLogger.Log(ufwe.Message & " in HTTPUpload.UploadIt (UriFormatWebException in GetRequestStream)")
End If
mblnFileSent = False
Catch ex As Exception
If logErrors Then
TextLogger.Log(ex.Message & " in HTTPUpload.UploadIt (Exception in GetRequestStream)")
End If
mblnFileSent = False
'Me.Files.Item(i).Sent = False
End Try
'If mblnFileSent Then
Try
resp = req.GetResponse()
code = resp.StatusCode
If code.ToString = "OK" Or code.ToString = "Created" Then
Me.Files.Item(i).Sent = True
End If
Catch ex As Exception
If logErrors Then
TextLogger.Log(ex.Message & " in HTTPUpload.UploadIt (in GetResponse)")
End If
Finally
resp.Close()
End Try
'End If
End If
req = Nothing
End If
Next
reqStream = Nothing
ascii = Nothing
UploadIt = 1
'code = resp.StatusCode
End Function

GeneralWebRequest and WebResponse are in System.Net namespace Pinmemberglavonjahans_chrstn10:48 30 Sep '06  
QuestionCould you post all of the code? Pinmemberplatorres9:41 13 Sep '06  
GeneralIt doesn't work for me Pinmembermarco314:41 1 Jun '06  
GeneralThis is a quick and easy guide!! Pinmemberideasfreelance8:03 10 Nov '05  
GeneralNo writeup Pinmembervikramk13:24 1 Oct '05  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.5.120529.1 | Last Updated 18 May 2005
Article Copyright 2005 by S Sansanwal
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid