Solved

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

Posted on 2003-11-11
6
2,087 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
  • 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 300 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
Forrester Webinar: xMatters Delivers 261% ROI

Guest speaker Dean Davison, Forrester Principal Consultant, explains how a Fortune 500 communication company using xMatters found these results: Achieved a 261% ROI, Experienced $753,280 in net present value benefits over 3 years and Reduced MTTR by 91% for tier 1 incidents.

 

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

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

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…
Welcome my friends to the second instalment and follow-up to our Minify and Concatenate Your Scripts and Stylesheets (http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/A_4334-Minify-and-Concatenate-Your-Scripts-and-Stylesheets.html)…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…

756 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