Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

System.Net.HttpWebRequest.Create(url), something simular.

Posted on 2003-11-11
6
Medium Priority
?
2,103 Views
Last Modified: 2012-05-04
Ok, what I which to acheive is to send my page to an email everytime a person views it.

The emailing part is ok, but how can I save the response.outputstream of my aspx page into a string, once it has run?

Yea it's an odd question I know.

I have this code, which does this from another page but I want to get the stuff from the page that is running.

private String readHtmlPage(string url)
{
                String result;
                System.Net.WebResponse objResponse;
     System.Net.WebRequest objRequest = System.Net.HttpWebRequest.Create(url);
     objResponse = objRequest.GetResponse();
     using (System.IO.StreamReader sr =  new System.IO.StreamReader(objResponse.GetResponseStream()) )
     {
          result = sr.ReadToEnd();
          // Close and clean up the StreamReader
          sr.Close();
     }
     return result;
}
0
Comment
Question by:iqula
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
6 Comments
 
LVL 28

Expert Comment

by:mmarinov
ID: 9730546
0
 

Author Comment

by:iqula
ID: 9730720
Thanks, but this appends to the output stream, what I need is the output stream as a string, or am I missing something here :)
0
 
LVL 28

Accepted Solution

by:
mmarinov earned 1200 total points
ID: 9730804
you can see here how you can resolve the problem
http://support.microsoft.com/default.aspx?scid=kb;en-us;810205

you can get the whole code :-) and Response.Filter = new ResponseFilter(Response.Filter); not in Init like it is described but in the Application_BeginRequest in global.asax file.

B..G
0
NEW Veeam Agent for Microsoft Windows

Backup and recover physical and cloud-based servers and workstations, as well as endpoint devices that belong to remote users. Avoid downtime and data loss quickly and easily for Windows-based physical or public cloud-based workloads!

 

Author Comment

by:iqula
ID: 9731503
This looks very promising, how can I get the string instead of writinf to a file?
0
 
LVL 28

Expert Comment

by:mmarinov
ID: 9731761
you can use this code in overriden void Close()

sr = new StreamReader(@"C:\FilterOutput\response.htm");
s = sr.ReadToEnd();
sr.Close();

and after that to send s to static variable in your class

so every time you submit a page at the end of the request you will send the content of this file and when you enter again in the PageLoad you can get it

B..G
0
 

Author Comment

by:iqula
ID: 9732314
I'm not sure how you chaps know this stuff, but I'm really impressed :)

Here is my solution: Thanks

      public class EmailThisPage :Stream
      {
            //Call from an aspx page within the OnInit(EventArgs e), like this
            //------------------------------------------------------------------
            //tools.EmailThisPage ep = new tools.EmailThisPage(Response.Filter);
            //ep.From="name@domain.com";
            //ep.To="name@domain.com";
            //ep.Subject="A page email";
            //ep.SmtpServer="localhost";
            //Response.Filter = ep;
            //------------------------------------------------------------------
            private Stream m_sink;
            private long m_position;
            public string From, To, Cc, Bcc, Subject, SmtpServer;
            public Exception error;

            public EmailThisPage(Stream sink)//Response.Filter
            {
                  m_sink = sink;
            }

            // The following members of Stream must be overriden.
            public override bool CanRead
            {get { return true; }}

            public override bool CanSeek
            {get { return false; }}

            public override bool CanWrite
            {get { return false; }}

            public override long Length
            {get { return 0; }}

            public override long Position
            {
                  get { return m_position; }
                  set { m_position = value; }
            }

            public override long Seek(long offset, System.IO.SeekOrigin direction)
            {
                  return 0;
            }

            public override void SetLength(long length)
            {
                  m_sink.SetLength(length);
            }

            public override void Close()
            {
                  m_sink.Close();
            }

            public override void Flush()
            {
                  m_sink.Flush();
            }

            public override int Read(byte[] buffer, int offset, int count)
            {
                  return m_sink.Read(buffer, offset, count);
            }

            // Override the Write method to filter Response to a file.
            public override void Write(byte[] buffer, int offset, int count)
            {            
                  string body;
                  //Write out the response to the browser.
                  m_sink.Write(buffer, 0, count);
         
                  body=System.Convert.ToBase64String(buffer, 0, buffer.Length);

                  System.Text.UTF8Encoding objUTF8 =new System.Text.UTF8Encoding();
                  body= objUTF8.GetString(Convert.FromBase64String(body));
                  //Write out the response to the string.
                  try
                  {

                        MailMessage Mailer = new MailMessage();
                        SmtpMail.SmtpServer = SmtpServer;
                        Mailer.From = From;
                        Mailer.To = To;
                        Mailer.Cc = Cc;
                        Mailer.Bcc = Bcc;
                        Mailer.Subject = Subject;
                        Mailer.Body =body;


                        Mailer.BodyFormat = System.Web.Mail.MailFormat.Html;
                        SmtpMail.Send(Mailer);
                  }
                  catch
                  {
                        MailMessage Mailer = new MailMessage();
                        SmtpMail.SmtpServer = SmtpServer;
                        Mailer.From = From;
                        Mailer.Cc = Cc;
                        Mailer.Bcc = Bcc;
                        Mailer.Body =body;
                        Mailer.BodyFormat = System.Web.Mail.MailFormat.Html;
                        Mailer.To =      System.Configuration.ConfigurationSettings.AppSettings["erroremail"];
                        Mailer.Subject = "Email Error (To:)" + To + " (Subject:)" + Subject;
                        SmtpMail.Send(Mailer);
                  }
            }
      }
0

Featured Post

Learn Veeam advantages over legacy backup

Every day, more and more legacy backup customers switch to Veeam. Technologies designed for the client-server era cannot restore any IT service running in the hybrid cloud within seconds. Learn top Veeam advantages over legacy backup and get Veeam for the price of your renewal

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Summary Displaying images in RichTextBox is a common requirement with limited solutions available. Pasting through clipboard or embedding into RTF content only support static images.  This article describes how to insert Windows control objects int…
This document covers how to connect to SQL Server and browse its contents.  It is meant for those new to Visual Studio and/or working with Microsoft SQL Server.  It is not a guide to building SQL Server database connections in your code.  This is mo…
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…

715 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question